博客
关于我
Spring Cloud系列_18 feign实现服务熔断,降级
阅读量:668 次
发布时间:2019-03-16

本文共 5452 字,大约阅读时间需要 18 分钟。

以下是优化后的内容:


Spring Boot + OpenFeign + Hystrix 服务消费者 ```python

基于Spring Boot和OpenFeign的组合使用案例,展示如何构建服务消费者并实现服务失效处理。

本案例中,服务消费者通过OpenFeign与服务提供者进行通信,并在服务失效时引入Hystrix进行熔断处理。---### 依赖管理```xml
org.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 List
productList;}@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")    List
getProductList(); @GetMapping("/provider/getProductsById/{id}") Product getProductsById(@PathVariable("id") Long id); @PostMapping("/provider/getProductsByIdWithPost") Product selectProductByIdWithPost(Product product); @PostMapping("/provider/create") Map
createProduct(Product product); @GetMapping("/provider/pojo") Product selectProductByPojo(Product product);}public interface OrderService { Order getOrderById(Long id); Order getById(Long id); Order selectProductByIdWithPost(Product product); Map
createProduct(Product product); Product selectProductByPojo(Product product);}

熔断处理实现

public class ProductServiceFallbackImpl implements ProductService {    @Override    public List
getProductList() { 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 Map
createProduct(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熔断,以及客户端的封装与调用。

转载地址:http://ggoqz.baihongyu.com/

你可能感兴趣的文章
Unable to run Intel® HAXM installer: 无法启动过程,工作目录
查看>>
WslRegisterDistribution failed with error: 0x800701bc
查看>>
POJ 3666 Making the Grade 线性DP
查看>>
POJ - 3617 Best Cow Line
查看>>
14栈和队列的应用-数制的转换
查看>>
Vue.js学习-10-Vue.js计算属性set get 简单学习
查看>>
Vue.js学习-15-v-for循环数组内容
查看>>
解决Max retries exceeded with url的问题
查看>>
研发效能工具集
查看>>
saas创业八阶段-4、团队复制阶段
查看>>
【AI全栈二】视频流多目标多类别无延迟高精度高召回目标追踪 YOLO+Deepsort 全解
查看>>
2020 祥云杯misc 到点了
查看>>
Linux——系统安全及应用(开关机安全机制、系统弱口令检测、NMAP)
查看>>
C语言共用体union
查看>>
kafka超时错误或者发送消息失败等错误,排错方式
查看>>
Python3 排序函数问题
查看>>
Python3 多线程问题
查看>>
Windows下配置单机Hadoop环境 pyspark
查看>>
git教程之远程仓库
查看>>
程序员搞笑动图:告诉你真正的人工智能什么鬼 区块链
查看>>