Spring Cloud Feign核心源码解读和服务调用方式ribbon和Feign(五)

一、Ribbon和Feign两个的区别

Ribbon和Feign都是用于调用其他服务的,不过方式不同。

1、启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

2、服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。

3、调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。

     Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,

    不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

二、选择Feign

       其实也默认集成了Ribbo!更加思路清晰和方便;采用注解方式进行配置,配置熔断等方式方便;

LoadBalancerFeignClient类

 核心方法execute()

参数  Request类

参数  Options类 

可以通过调试查看

(1) 模拟商品服务接口响应慢,线程睡眠10秒:

    //根据商品ID查找商品信息
    @RequestMapping("/find")
    public Object find(int id){

        //商品如果有问题让它故意睡10秒
        try {
           TimeUnit.SECONDS.sleep(10);
       //     TimeUnit.SECONDS.sleep(1);  //修改成1s
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

 再重新启动访问

发生异常:

那么如何解决呢?

 用超时配置 :

将这个配置复制到application.yml中的订单服务,先修改成11s

 

再重新启动:等待11秒就没有异常了!

(2) 模拟商品服务接口响应慢,线程睡眠1秒:

 将配置超时注释掉;就又发生异常!

   原因: 默认optons readtimeout是60,但是由于熔断hystrix默认是1秒超时

那么如何解决呢?

   将配置超时设置为2秒

再重新启动:无异常哦!

(3)Ribbon默认是“轮询”策略,也就是每一个轮着访问。那么能否修改成“随机”策略?

 可以在配置文件中添加: 

#自定义负载均衡策略
product-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

重新启动;可以查看到是OK的哦! 

  

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值