《feign (ribbon + hystrix + hystrix监控) 工具整合》
作者:互联网
背景
先看 feign
的单独文章 Feign 声明式客户端接口
spring cloud 中好多工具是 一起使用的,feign 整合了 ribbon和hystrix 并提供了声明式消费者客户端,我们把这些工具整合一起使用
用 feign 代替 hystrix+ribbon
feign + ribbon 负载均衡和重试
1 - 负载均衡
无需额外配置,feign已经启用了 ribbon
负载均衡
和重试
机制,可以通过配置对参数进行调用ConnectTimeout=1000 ReadTimeout=1000 MaxAutoRetries=0 MaxAutoRetriesNextServer=1
2 - 配置 ribbon 超时和重试
- ribbon —— 全局配置
- item-service —— 对特定服务实例的配置
spring:
application:
name: feign
server:
port: 3001
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
ribbon:
ConnectTimeout: 1000
ReadTimeout: 1000
item-service:
ribbon:
MaxAutoRetries: 1
MaxAutoRetriesNextServer: 2
ConnectTimeout: 1000
ReadTimeout: 500
启动服务,访问测试
http://localhost:3001/item-service/35
提示 :
重载 一般不怎么使用,看项目的需求,如果需要才用
负载均衡默认都是有的,看情况,如果项目需要才用上
feign + hystrix 降级
1 - feign 启用 hystrix
feign
默认没有启用 hystrix
,添加配置,启用 hystrix
1.1 - application.yml 添加配置
feign:
hystrix:
enabled: true
1.2 启用 hystrix 后,访问服务
http://localhost:3001/item-service/35
默认1秒会快速失败,没有降级方法时,会显示白板页
2 - feign 实现 hystrix 降级
远程接口中指定降级类
目标:远程调用失败, 会执行降级类中的代码
2 - 1 远程接口 (接口)
ItemClient
@FeignClient(name="item-service",fallback = ItemClientFB.class)
public interface ItemClient {
...
...
OrderClient
...
@FeignClient(name="order-service",fallback = OrderClientFB.class)
public interface OrderClient{
...
UserClient
...
@FeignClient(name="user-service",fallback = UserClientFB.class)
public interface UserClient{
...
2 - 2 降级类
降级类需要实现远程接口
ItemClientFB
@Component
public class ItemClientFB implements ItemClient{
@Override
public JsonResult<List<Item>> getItems(String orderId) {
return JsonResult.err().msg("调用商品失败");
}
@Override
public JsonResult<?> decreaseNumber(List<Item> items) {
return JsonResult.err().msg("调用商品失败");
}
}
OrderClientFB
@Component
public class OrderClientFB implements OrderClient{
@Override
public JsonResult<Order> getOrder(String orderId) {
return JsonResult.err().msg("调用订单失败");
}
@Override
public JsonResult<?> saveOrder() {
return JsonResult.err().msg("调用订单失败");
}
}
UserClientFB
@Component
public class UserClientFB implements UserClient{
@Override
public JsonResult<User> getUser(Integer userId) {
return JsonResult.err().msg("调用用户失败");
}
@Override
public JsonResult<?> addScore(Integer userId, Integer score) {
return JsonResult.err().msg("调用用户失败");
}
}
2 - 3 启动服务,访问测试
http://localhost:3001/item-service/35
调用失败后 跳转到降级对象
(降级成功)
feign + hystrix 监控
1 - pom.xml 添加 hystrix 起步依赖
feign 没有包含完整的 hystrix 依赖
1 - 1 xml 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
1 - 2 可视化依赖
主程序添加 @EnableCircuitBreaker
@EnableCircuitBreaker
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Sp09FeignApplication {
public static void main(String[] args) {
SpringApplication.run(Sp09FeignApplication.class, args);
}
}
2 - 配置 actuator,暴露 hystrix.stream 监控端点
查看pom.xml, 确认已经添加了
actuator
依赖
2 - 1 actuator 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2 - 2 application.yml 暴露 hystrix.stream 端点
management:
endpoints:
web:
exposure:
include: hystrix.stream
3 - 启动服务,查看监控端点
http://localhost:3001/actuator
4 - hystrix dashboard (监控仪表)
如果没有 hystrix dashboard仪表 或者没学过 那么请进 hystrix dashboard 断路器仪表盘
启动 hystrix dashboard 服务,填入 feign 监控路径,开启监控
-
访问仪表服务器 : http://localhost:4001/hystrix
-
填入 feign 监控路径 :http://localhost:3001/actuator/hystrix.stream
访问业务服务器 : http://localhost:3001/item-service/35
标签:feign,JsonResult,hystrix,service,public,ribbon 来源: https://blog.csdn.net/weixin_45103228/article/details/114144114