发表于: 2020-07-30 21:42:13
1 1281
今天完成的事情
1. RestTemplate 上的 Hystrix 断路器 demo
2. Feign client demo
3. Feign 负载均衡
4. Feign 上使用 Hystrix 断路器
5. Hystrix Dashboard 监控断路器状态
遇到的问题
1. Hystrix Dashboard 一直显示 Loading····
解决的方法:降级 spring cloud 版本
降到 Hoxton.SR4 就正常了。
收获
1. RestTemplate 与 Regin
共同点:
a,都是用于消费服务的
b,都是封装了第三方的请求库
c,都可以配合 Ribbon 实现负载均衡
区别:
RestTemplate
a,RestTemplate 使用声明的方式来调用
b,RestTemplate 可以很方便的把 json、xml 转换为实体。
@Service
public class RibbonService {
Logger logger = LogManager.getLogger(this.getClass());
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "hiError")
public String hi(String name) {
logger.info("{}", name);
String url = "http://eureka-client/hi/";
return restTemplate.getForObject(url + name, String.class);
}
public String hiError(String name){
return "Hello, " + name + ",Sorry,error";
}
}
Feign
a,使用注解的方式来构造请求
b,feign 可以很方便的用注解构造一个 http 请求,而不只是对 http 进行高层次的封装。在这一点上 restTemplate 没这么方便。
c,使用注解的方式构造请求清晰明了,可读性好。
@FeignClient(value = "eureka-client", configuration = FeignConfig.class, fallback = HiHystrix.class)
public interface EurekaClientFeign {
@GetMapping("/hi/{name}")
String sayHiFromeClientEureka(@PathVariable(value = "name") String name);
}
@Component
public class HiHystrix implements EurekaClientFeign {
@Override
public String sayHiFromeClientEureka(String name) {
return "hi, " + name + ", sorry, error!";
}
}
2. 使用 Hystrix 熔断器
熔断器关键在于能够及时发现服务异常并且快速返回错误进行服务降级,防止产生雪崩效应。
上面一条的实例代码中已经展示了 Hystrix 在 restTemplate 与 feign 中的用法。
实测一个服务下线后熔断器能够在非常短的时间内发现并且响应错误请求&切换到其他服务。
服务重新上线到熔断器关闭在 40 秒以内。
3. Hystrix Monitor 与 Turbine 聚合监控
Hystrix Monitor 可以实现只监控一个熔断器,也可以监控多个熔断器或者指定服务的熔断器。
明天的计划
1. 路由网关 Spring Cloud Zuul
评论