Spring Cloud Feign Hystrix Demo

接口服务调用

调用被@FeignClient注解修饰的接口,将消息转换成Feign请求实例,交由Feign框架处理。

Feign

Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,封装了Http调用流程。注:将被调用者服务接口进行封装。

Hystrix

熔断处理机制。Feign的调用,会被Hystrix代理拦截,对每一个Feign调用请求,Hystrix都会将其包装成HystrixCommand,参与Hystrix的流控和熔断规则。如果请求判断需要熔断,则Hystrix直接熔断,抛出异常或者使用FallbackFactory返回熔断Fallback结果;如果通过,则将调用请求传递给Ribbon组件。

Ribbon

服务地址选择 当请求传递到Ribbon之后,Ribbon会根据自身维护的服务列表,根据服务的服务质量,如平均响应时间,Load等,结合特定的规则,从列表中挑选合适的服务实例,选择好机器之后,然后将机器实例的信息请求传递给Http Client客户端,HttpClient客户端来执行真正的Http接口调用。

HttpClient

Http客户端,真正执行Http调用根据上层Ribbon传递过来的请求,已经指定了服务地址,则HttpClient开始执行真正的Http请求。

Demo

依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>

        <!--hystrix依赖,主要是用  @HystrixCommand -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <!--服务注册-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--服务调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

配置文件

#开启熔断机制
feign.hystrix.enabled=true
# 设置hystrix超时时间,默认1000ms
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000

添加Feign的实现类

@Component
public class OrderFeignClient implements OrderClient {
    @Override
    public R getOrder(String OrderId) {
        return R.error().message("time out");
    }
}

修改注解Fallback

@FeignClient(name = "service-order", fallback = OrderFeignClient.class)
@Component
public interface OrderClient {
    @GetMapping(value = "/order/{OrderId}")
    public R GetOrder(@PathVariable("OrderId") String orderId);
}
posted @ 2022-12-26 13:57  Leejk  阅读(40)  评论(0编辑  收藏  举报