
Spring Cloud系列_18 feign实现服务熔断,降级
发布日期:2021-05-19 20:50:17
浏览次数:12
分类:精选文章
本文共 5452 字,大约阅读时间需要 18 分钟。
以下是优化后的内容:
Spring Boot + OpenFeign + Hystrix 服务消费者 ```python
基于Spring Boot和OpenFeign的组合使用案例,展示如何构建服务消费者并实现服务失效处理。
本案例中,服务消费者通过OpenFeign与服务提供者进行通信,并在服务失效时引入Hystrix进行熔断处理。---### 依赖管理```xmlorg.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-openfeign org.project.lombok lombok io.github.openfeign feign-httpclient org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine
OpenFeign 集成 Hystrix ```python
本案例中,OpenFeign与Hystrix集成后,服务消费者在服务失效时可以通过Hystrix进行熔断处理,避免了长时间等待或抛出异常。
配置说明
server: port: 8110 compression: enabled: true mime-types: application/json,application/xml,text/xml,text/html,text/plain min-response-size: 512spring: application: name: service-consumer-hystrix-feigneureka: client: service-url: defaultZone: http://root:123@localhost:8761/eureka/,http://root:123@localhost:8762/eureka/ register-with-eureka: false registry-fetch-interval-seconds: 10feign: hystrix: enabled: true
实体类定义
@Data@NoArgsConstructor@AllArgsConstructorpublic class Order implements Serializable { private Long id; private String orderNo; private String orderAddress; private BigDecimal totalPrice; private ListproductList;}@Data@NoArgsConstructor@AllArgsConstructorpublic class Product implements Serializable { private Long id; private String name; private Integer num; private BigDecimal price;}
服务接口定义
@FeignClient(value = "service-provider", fallback = ProductServiceFallbackImpl.class)public interface ProductService { @GetMapping("/provider/getProducts") ListgetProductList(); @GetMapping("/provider/getProductsById/{id}") Product getProductsById(@PathVariable("id") Long id); @PostMapping("/provider/getProductsByIdWithPost") Product selectProductByIdWithPost(Product product); @PostMapping("/provider/create") Map
熔断处理实现
public class ProductServiceFallbackImpl implements ProductService { @Override public ListgetProductList() { return Arrays.asList( new Product(1L, "fallback01", 1, new BigDecimal("100")), new Product(2L, "fallback02", 1, new BigDecimal("100")) ); } @Override public Product getProductsById(Long id) { return new Product(id, "fallback0" + id, 1, new BigDecimal("100")); } @Override public Product selectProductByIdWithPost(Product product) { return new Product(product.getId(), "fallback0" + product.getId(), 1, new BigDecimal("100")); } @Override public Map createProduct(Product product) { return null; } @Override public Product selectProductByPojo(Product product) { return null; }}
服务实现类
@Servicepublic class OrderServiceImpl implements OrderService { @Resource private ProductService productService; @Override public Order getOrderById(Long id) { return new Order( id, "order01", "address", new BigDecimal("200"), productService.getProductList() ); } @Override public Order getById(Long id) { return new Order( id, "order01", "address", new BigDecimal("200"), Collections.singletonList(productService.getProductsById(id)) ); } @Override public Order selectProductByIdWithPost(Product product) { return new Order( product.getId(), "order01", "address", new BigDecimal("200"), Collections.singletonList(productService.selectProductByIdWithPost(product)) ); } @Override public MapcreateProduct(Product product) { return productService.createProduct(product); } @Override public Product selectProductByPojo(Product product) { return productService.selectProductByPojo(product); }}
启动类注解
@EnableFeignClients
测试结果
通过上述配置和实现,消费者可以直接调用服务提供者的端点,返回的数据如下:
{ "id": 1, "orderNo": "order01", "orderAddress": "address", "totalPrice": 200, "productList": [ { "id": 1, "name": "fallback01", "num": 1, "price": 100 }, { "id": 2, "name": "fallback02", "num": 1, "price": 100 } ]}
以上是基于Spring Boot和OpenFeign的服务消费者案例,展示了如何实现服务发现、过渡到Hystrix熔断,以及客户端的封装与调用。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月08日 16时23分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mos-excel集成文档
2019-03-15
chat 快问!
2019-03-15
2.Html与CSS
2019-03-15
6.Xml
2019-03-15
3.Ajax&Json
2019-03-15
Linux总结
2019-03-15
DKT—Going Deeper with Deep Knowledge Tracing
2019-03-15
超好用的原生 JS + Canvas 进行图片压缩
2019-03-15
Android简单MVP解析接口列表,搜索框,点击切换
2019-03-15
ADB
2019-03-15
响应的HTTP协议格式+常见的响应码
2019-03-15
Java数组
2019-03-15
创建线程方式
2019-03-15
线程池
2019-03-15
Netty读写方法
2019-03-15
LRUCache
2019-03-15
Mac上如何强制关闭应用
2019-03-15
关于Linux系统中touch命令的说明
2019-03-15
剑指Offer03-数组中重复的数字
2019-03-15
将windows里的内容直接复制粘贴到ubuntu,提高效率
2019-03-15