标签:microsoft none framework map review 代码 border sof 最好
在微服务架构中经常包括多个服务层,比如A为B提供服务,B为C和D提供服务,如果A出故障了就会导致B也不可用,最终导致C和D也不可用,这就形成了雪崩效应。
所以为了应对这种情况,我们就需要一种容错机制,该机制需要实行以下两点:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
@RestController
public class MovieController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
private static final Logger logger = LoggerFactory.getLogger(MovieController.class);
@HystrixCommand(fallbackMethod = "findByIdFallBack")
@GetMapping("/user/{id}")
public User findById(@PathVariable Long id){
//microservice-provider-user是虚拟主机名,默认和服务名称一致
//不能包括"_"之类的字符,否则Ribbon在调用时会报异常
return this.restTemplate.getForObject("http://microservice-provider-user/"+id,User.class);
}
public User findByIdFallBack(Long id){
User user = new User();
user.setId(-1L);
user.setAge(0);
user.setBalance(BigDecimal.ZERO);
user.setName("默认用户");
user.setUsername("默认用户");
return user;
}
}
这里考虑篇幅就不细说 @HystrixCommand注解的属性配置问题了。
1.分别启动服务microservice-discovery-eureka,microservice-provider-user,microservice-consumer-movie-ribbon-hystrix
2.游览器访问http://localhost:8010/user/1获得如下结果
{"id":1,"username":"xxx","name":"zhangsan","age":22,"balance":100}
3.关掉服务microservice-provider-user再重新请求,获得如下结果。
{"id":-1,"username":"默认用户","name":"默认用户","age":0,"balance":0}
说明服务不可用时,进入到了回退方法。
为服务引入SpringBoot Actuator,再访问/health端点可以查看断路器状态,不过我尝试失败了。
1.复制项目microservice-consumer-movie-feign改为microservice-consumer-movie-feign-hystrix-fallback,注意pom文件spring-cloud-starter-eureka 和 spring-cloud-starter-feign 已经过时。
2.Feign默认已经整合了Hystrix,所以不需要额外引入依赖。
3.将之前的UserFeignClient接口修改为如下
开始测试
1.按顺序启动服务microservice-discovery-eureka,microservice-provider-user,microservice-consumer-movie-feign-hystrix-fallback
2.访问http://localhost:8010/user/1可获得正常结果
3.停止microservice-provider-user后再次访问获得如下结果说明已经成功了。
{"id":-1,"username":"默认用户","name":"默认用户","age":0,"balance":0}
如果你遇到了404问题,可能是因为从Spring Cloud Dalston开始,Feign默认是不开启Hystrix的。所以需要在application.yml文件上添加如下内容。
注意单词不要拼写错,我就是因为enabled写成了enable折腾了半天。。。。
1.复制项目microservice-consumer-movie-feign改为microservice-consumer-movie-feign-hystrix-fallback-factory
2.修改UserFeignClient接口
还可以根据不同的异常类型,返回不同的结果。
测试过程跟上面差不多,多了个查看日志的过程,在此省略。
今天要睡觉了,明天继续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
【SpringCloud构建微服务系列】学习断路器Hystrix
标签:microsoft none framework map review 代码 border sof 最好
原文地址:https://www.cnblogs.com/2YSP/p/9344552.html