feign整合hystrix

本文介绍了如何在Spring Cloud Dalston后的Feign中启用Hystrix降级,并详细讲解了降级方法、fallback工厂的使用以及超时时间的配置。通过实例演示了如何获取服务错误信息并确保熔断与重试机制的配合。

feign 默认是支持hystrix的,但是在Spring cloud Dalston 版本之后就默认关闭了, 因为业务需求不一定要使用;所以现在要使用首先得打开他,在yml文件加上如下配置:

feign.hystrix.enabled=true

加上配置之后降级方法怎么写呢?

@FeignClient(value="34-SPRINGCLOUD-SERVICE-GOODS", fallback = GoodsRemoteClientFallBack.class)
public interface GoodsRemoteClient {

    /**
     * 声明一个feign的接口,它的实现是服务提供者的controller实现
     *
     * @return
     */
    @RequestMapping("/service/goods")
    public ResultObject goods();
}

在feign客户端的注解上 有个属性叫fallback 然后指向一个类GoodsRemoteClientFallBack类:

@Component
public class GoodsRemoteClientFallBack implements GoodsRemoteClient {

    @Override
    public ResultObject goods() {
        return new ResultObject(Constant.ONE,"feign服务调用降级");
    }
}

如此方法降级便可以了;
当然如果需要拿到具体的服务错误信息,那么可以这样:
客户端指定一个fallbackFactory即可;

@FeignClient(value="34-SPRINGCLOUD-SERVICE-GOODS", fallbackFactory = GoodsRemoteClientFallBackFactory.class)
public interface GoodsRemoteClient {

    /**
     * 声明一个feign的接口,它的实现是服务提供者的controller实现
     *
     * @return
     */
    @RequestMapping("/service/goods")
    public ResultObject goods();
}
@Component
public class GoodsRemoteClientFallBackFactory implements FallbackFactory<GoodsRemoteClient> {

    @Override
    public GoodsRemoteClient create(Throwable throwable) {
        return new GoodsRemoteClient() {
            @Override
            public ResultObject goods() {
                String message = throwable.getMessage();
                System.out.println("feign远程调用异常:" + message);
                return new ResultObject();
            }
        };
    }
}

这个message 就是错误信息,至此,就完成了feign与hystrix的整合;
Spring Cloud Feign超时时间设置
Feign调用服务的默认时长是1秒钟,也就是如果超过1秒没连接上或者超过1秒没响应,那么会相应的报错。而实际情况是因为业务的不同可能出现超出1秒的情况,这时我们需要调整超时时间。
Feign 的负载均衡底层用的就是 Ribbon在application.properties中添加如下配置,超过5秒没连接上报连接超时,如果超过5秒没有响应,报请求超时;

# 参考RibbonClientConfiguration
# 请求连接的超时时间 默认的时间为 1 秒
ribbon.ConnectTimeout=5000
# 请求处理的超时时间
ribbon.ReadTimeout=5000

ribbon还有MaxAutoRetries对当前实例的重试次数,
MaxAutoRetriesNextServer对切换实例的重试次数,
如果ribbon的ReadTimeout超时,或者ConnectTimeout连接超时,会进行重试操作
由于ribbon的重试机制,通常熔断hystrix的超时时间需要配置的比ReadTimeout长,ReadTimeout比ConnectTimeout长,否则还未重试,就熔断了;
为了确保重试机制的正常运作,理论上(以实际情况为准)建议hystrix的超时时间为:(1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值