Spring Cloud 微服务 ribbon 和 feign 使用

一、Ribbon

Spring Cloud Ribbon是基于 Netflix Ribbon实现的一套客户端,负载均衡的工具,spring-cloud-starter-netflix-eureka-client 包中已经引入了ribbon依赖,无需在引入,新建配置类,配置类中添加注解 @LoadBalanced

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

ribbon负载均衡

Ribbon 核心组件IRule,根据特定算法,从服务列表中选取一个要访问的服务

#自定义负载均衡策略
product-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

如果每个机器配置一样,则建议不修改策略 (推荐)
如果部分机器配置强,则可以改为 WeightedResponseTimeRule

二、Feign

前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。

所以Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时自己封装服务调用客户端的开发量。

Feign集成了Ribbon
利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

1、加入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、启动类加入注解 @EnableFeignClients

3、增加一个接口 并添加注解 @FeignClient(name="product-service")

@FeignClient(name = "product-service")
public interface ProductClient {
    @GetMapping("/api/v1/product/find")
    String findById(@RequestParam(value = "id") int id);
}

4、接下来只需要注入就可以通过ProductClient调用方法了

feign超时配置

默认optons readtimeout是60秒,feign中默认集成了hystrix ,hystrix中默认超时时间为1秒,要注意一下

feign:
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 2000

猜你喜欢

转载自blog.csdn.net/Damao1183297959/article/details/108895885