继上一次初步搭建 springcloud 之后,我们来集成一下五大组件的 ribbon、zuul、hystrix。
初步搭建springcloud
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
当我们引入 openfeign 的时候,已经将 ribbon 和 hystrix 一并引入了,因为 openfeign 封装了 ribbon、hystrix。
Ribbon
feign 负责各模块间的调用,而 ribbon 负责调用的负载均衡。
上一章我们展示了如何在 service-b 中调用 service-a,现在我们升级一下,加入 ribbon。
在 service-b 中添加以下配置:
#其中“service-a”指明对哪个微服务的调用进行配置,修改策略修改最后的类名即可
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #配置规则 随机
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule #配置规则 重试
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重
service-a:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# 每台服务器最多重试次数,但是首次调用不包括在内
MaxAutoRetries: 1
# 最多重试多少台服务器
MaxAutoRetriesNextServer: 1
# 无论是请求超时或者socket read timeout都进行重试
OkToRetryOnAllOperations: true
ReadTimeout: 5000
ConnectTimeout: 5000
然后我们启动两个 service-a 实例,端口分别为 7001、7003,使用 postman 调用。
我们使用的是随机策略,默认使用的是轮询策略。
Hystrix
当我们的模块间相互调用的使用,会发生超时等调用失败的情况,这有时会导致我们调用接口时长时间等待,造成不好的交互体验,所以我们需要 “快速失败”,而 hystrix 刚好能满足这一点。
service-b 调用 service-a ,需要在 service-b 中添加配置项
# 开启熔断
feign:
hystrix:
enabled: true
之前我们远程调用定义了一个feignclient:
@FeignClient(value = "service-a")
@RequestMapping("/a")
public interface ServiceAFeignClient {
@GetMapping("/test")
String TestA(@RequestParam("s") String s);
@PostMapping("/index")
String IndexA(@RequestBody String s);
}
现在我们需要添加一个 feignclient 实现类:
@Component
@RequestMapping(value = &#