博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Feign 与 Hystrix
阅读量:7095 次
发布时间:2019-06-28

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

Feign 与 Hystrix

Feign是一个声明式的web服务客户端,它使得web服务调用非常的简单,当我们使用Feign时,Spring Cloud

整合了Ribbon和Eureka,从而为我们提供了一个负载均衡的Http客户端。

一、Feign的使用

首先我们引入Feign的依赖,由于Feign要通过Eureka去获取服务,所以也要引入Eureka-client:

org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-openfeign

然后再Spring Boot启动类上打上@EnableFeignClients注解,使得应用可以使用FeignClient,如下:

@SpringBootApplication@EnableFeignClientspublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

最后编写远程调用接口,调用上一篇中提到的Order服务,如下:

@FeignClient(value = "SERVICE-ORDER")public interface RemoteOrder {    @RequestMapping("/order/detail")    Order getRemoteOrder();}

其中,@FeignClient指明这个接口是一个FeignClient,value值是我们要从eureka注册中心获取的服务,由于eureka-client-order项目中

spring.application.name是SERVICE-ORDER,所以我们这里写SERVICE-ORDER。

我们再写个controller使用Feign去调用远程服务,如下:

@RestController@RequestMapping("feign")public class FeignController {    @Autowired    private RemoteOrder remoteOrder;    @RequestMapping("order")    public Order feignOrder(){        return remoteOrder.getRemoteOrder();    }}

最后,我们修改一下eureka-client-order,启动两个服务,两个服务的订单状态不同,如下:

spring:  profiles: node-1server:  port: 8100order:  status: '已付款'---spring:  profiles: node-2server:  port: 8300order:  status: '未支付'

大功告成,我们启动4个服务:eureka注册中心,order-node-1,order-node-2,feign。访问我们的controller,并刷新,显示结果如下:

{"id":123123,"totalPrice":87.98,"orderStatus":"已付款"}{"id":123123,"totalPrice":87.98,"orderStatus":"未支付"}

说明feign的负载均衡已经启用。

二、Hystrix熔断

首先我们引入Hystrix的依赖:

org.springframework.cloud
spring-cloud-starter-netflix-hystrix

并启用Feign的Hystrix,

feign:  hystrix:    enabled: true

Feign封装了所有方法的熔断方法,Hystrix支持fallback的概念,在FeignClien中指定即可

@FeignClient(value = "SERVICE-ORDER",fallback = OrderHystrix.class)public interface RemoteOrder {    @RequestMapping("/order/detail")    Order getRemoteOrder();}

指定fallback的类为OrderHystrix,我们新建OrderHystrix类并实现RemoteOrder接口:

@Servicepublic class OrderHystrix implements RemoteOrder {    @Override    public Order getRemoteOrder() {        Order order = new Order();        order.setOrderStatus("熔断order");        return order;    }}

这样我们在调用远程的/order/detail时,如果发生超时或者错误,就会调用getRemoteOrder()方法。

我们可以把eureka-client-order的两个服务都停掉,然后进行访问,结果如下:

{"id":123123,"totalPrice":87.98,"orderStatus":"熔断order"}

说明熔断机制起作用了。

项目示例地址:。

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

你可能感兴趣的文章
虚拟机安装centos7后只有lo网卡的解决方法
查看>>
eclipse 自动生成 自定义注释
查看>>
$.ajax() 例子
查看>>
win7宽带连接的711错误
查看>>
java————串————方面的知识2
查看>>
shell脚本案例分析
查看>>
web.xml is missing and <failOnMissingWebXml> is se
查看>>
一段经典的抽奖算法 for PHP版
查看>>
守护进程与远程登录服务器
查看>>
冒泡排序
查看>>
ubantu 安装mp3插件
查看>>
我的友情链接
查看>>
larbin
查看>>
Python基础
查看>>
限定某个目录禁止解析php、限制user_agent、php相关配置(php日志)
查看>>
Python 设计模式: 桥接模式(bridge pattern)
查看>>
python编程使用协程并发的优缺点
查看>>
linux cat,tac,more,less,head,tail,cut,sort,uniq,wc,tr命令的使用
查看>>
shell脚本(一)
查看>>
使用Unity for IOS 集成 Cardboard教程
查看>>