springcloud中的组件

Posted 永刚的点滴成长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud中的组件相关的知识,希望对你有一定的参考价值。

1、注册中心组件

  有多种支持,例如:服务治理Netflix Eureka、Consul、Zookeeper

2、负载均衡组件

  Netflix Ribbon客户端负载均衡组件

2、容错组件

  Netflix Hystrix 用于服务熔断降级容错,Resilience4j是G版本推荐的轻量级容错方案,专为 Java 8 和函数式编程而设计,借鉴了 Hystrix 的设计,提供了断路器(CircuitBreaker)、并发调用隔离(Bulkhead)、限流(RateLimiter)、重试(Retry)、超时(Timeout) 等功能;

4、网关组件

  客户端请求微服务时,先经过 Zuul,再调用微服务集群,这样对于校验、负载均衡等功能移到了 Zuul 中实现,而微服务只需关注自身的业务逻辑则可;

5、配置中心组件

  配置加载顺序:

  ·1、读本地 bootstrap.properties

   2、到注册中心注册服务

   3、连接 Config Server,加载远程配置 applicationTest-dev.properties

   4、加载本地 application.properties;

微服务之五:轻松搞定SpringCloud微服务-调用远程组件Feign

上一篇文章讲到了负载均衡在Spring Cloud体系中的体现,其实Spring Cloud是提供了多种客户端调用的组件,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate。但是,用起来最方便、最优雅的还是要属Feign了。今天这一篇文章是系列教程中第五篇,也是对负载均衡的第二篇,主要对Spring Cloud Feign的实战。

本系列教程

【微服务】轻松搞定SpringCloud微服务目录
本系列为连载文章,阅读本文之前强烈建议您先阅读前面几篇。

Feign简介

Feign是一种声明式、模板化的HTTP客户端,也是netflix公司组件。使用feign可以在远程调用另外服务的API,如果调用本地API一样。
我们知道,阿里巴巴的doubbo采用二进制的RPC协议进行底层通讯,客户端可以使用类似本地方法一样调用。那么,虽然Feign同样可以有这种效果,但是底层还是通过HTTP协议调取restful的API的方式。
通过Feign, 我们能把HTTP远程调用对开发者完全透明,得到与调用本地方法一致的编码体验。

Spring Cloud Feign

开始起飞

起飞之前,先说明一下,本篇文章还是会在之前文章的源码继续。因此同样需要服务发现中心、服务配置中心、服务、客户端等微服务,因此沿用之前的项目中的子项目。

创建客户端服务

为了方便,可以直接复制上一片文章中的cloud-hyh-ribbon-test-client 子项目。并命名为新子项目。

配置客户端Pom文件

<dependencies>
	<!--服务发现eureka组件 依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <!--web支持 依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--测试启动组件-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!--feign依赖 配置-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
    </dependency>
</dependencies>
<!--构建-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

配置文件配置

对resources文件下配置文件进行配置。

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8081/eureka/
  instance:
    appname: feign-client

server:
  port: 8093

spring:
  application:
    name: ribbon-client

启动类编写

创建子包以后,创建主类FeignApplication.java


/**
 * @Description :启动类,示范feign
 * @Author hanyahong
 * @Date 2017/12/10- 07:00
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(FeignClientApplication.class, args);
    }
}

说明:
@EnableFeignClients :该注解是开启feign的扫描。

创建服务层

创建文件夹service ,然后创建TestService.java。

/**
 * @Description :测试feign接口服务
 * @Author hanyahong
 * @Date 2017/12/10- 12:43
 * <p>
 * 通过在本服务的service层直接调用其他服务的api层的API接口进行相关操作。
 * cloud-service 是一个简单服务,测试返回一个获取博客名称的接口。
 */

@FeignClient("cloud-service")
public interface TestService {

    /**
     * 调取博客名称
     *
     * @return 博客名称
     */
    @GetMapping("/ribbon/name")
    String getBlogName();
}

说明:
@FeignClient 注解:就是你要调用的微服务接口所在的服务名。
比如A服务想调用B服务的服务。就要填写B服务的服务名。
@GetMapping注解:就是要调用的接口rest资源路径。

API层接口

我们将创建一个接口,暴露出去,可以调用刚才服务层的这个接口。

/**
 * @Description :博客操作API,对外暴露
 * @Author hanyahong
 * @Date 2017/12/10- 12:53
 */
@RestController
@RequestMapping(value = "/feign")
public class BlogApi {
    /**
     * 注入服务层接口
     */
    @Autowired
    TestService testService;


    /**
     * 通过Feign客户端的方式,调用之前一个服务的API
     *
     * @return
     */
    @RequestMapping("/blogName")
    public String getBlogNameByFeign() {
        return "通过feign方式得到:" + testService.getBlogName();
    }
}

目录参考

目录参考.png

启动项目群并测试

启动注册中心、配置中心、两个相同配置服务、还有一个本文创建的客户端cloud-hyh-test-feign.

查看是否启动成功

访问注册中心,查看是否全部启动。
image.png

已经启动成功!

访问测试

访问地址http://localhost:8093/feign/blogName 路径,查看是否成功返回需要的数据。

结果显示:

通过feign方式得到:千万之路刚开始-www.hanyahong.com-beijing该服务器端口8072

源码

本文出处:http://www.hanyahong.com/
Github源码:https://github.com/hanyahong/spring-cloud-microservice
转发请注明出处!

以上是关于springcloud中的组件的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud升级之路2020.0.x版-26.OpenFeign的组件

微服务之五:轻松搞定SpringCloud微服务-调用远程组件Feign

SpringCloud-Eureka

SpringCloud微服务(06):Config组件,实现配置统一管理

SpringCloud微服务(06):Config组件,实现配置统一管理

SpringCloud升级之路2020.0.x版-26.OpenFeign的组件