负载均衡之feign与ribbon比较

 

 

  • 常规的微服务有两种类型:一种是基于dubbo的微服务架构、另外一种是基于Spring Cloud的微服务架构。从概念上来讲,Dubbo和Spring Cloud并不能放在一起对比,因为Dubbo仅仅是一个RPC框架,实现Java程序的远程调用,实施服务化的中间件则需要自己开发;而Spring Cloud则是实施微服务的一系列套件,包括:服务注册与发现、断路器、服务状态监控、配置管理、智能路由、一次性令牌、全局锁、分布式会话管理、集群状态管理等。

  • 在做服务消费者时,考虑改用ribbon来做负载均衡,还是使用feign来做负载均衡;接下来进行对比一下

  • ribbon:

  •  

  •  

  • feign:

  •  

  •  

  • 最终选择了feign来进行负载均衡,原因有以下几点:

  • 1. feign本身里面就包含有了ribbon

2. feign自身是一个声明式的伪http客户端,写起来更加思路清晰和方便

//注意feign里面开启熔断器处理时,需要有以下配置:
server:8071
eureka: http://peer1:8082/eureka/
spring:
  application:
    name: service-feign
  hystrix:
    enabled: true
    client:
      service-url:
       defaultZone: 
  port: 

//熔断器的配置就拿一个订单的熔断器来说,需要继承相应的订单feign接口,并且在注解里面的@feignclient里面申明到fallback会调用到订单的熔断器类。

@FeignClient(name = "total-service",fallback = OrderHystrics.class)
public interface OrderFeignClient {
    public static final String version="/v0/order/";

  @RequestMapping(value =version+"sending/order/batch")
  @ApiOperation(value = "获取用户所有的发货中订单内容",notes = "获取用户所有订单内容")
  @ApiImplicitParams({
    @ApiImplicitParam(name = "sessionKey", value = "sessionKey", dataType = "String",paramType = "query"),
    @ApiImplicitParam(name = "page",value = "pageNum",dataType = "int",paramType = "query") })
  public List<Object> sendingOrder(@RequestParam(name = "sessionKey") String sessionKey,
        @RequestParam(name = "page") int page);
 }

熔断器部分代码:

@Component

@Slf4j

public class OrderHystrics implements OrderFeignClient {
    public List<Object> sendingOrder(String sessionKey, int page) {
        Date date=new Date();
        log.warn(date.toString()+"sendingOrder出现异常!请管理员尽快处理");
        return null;
    }

}
  • 3. fegin是一个采用基于接口的注解的编程方式,更加简便

  • 注意:一般在feign调用相应的service接口时候,第一次调用会因为超时而导致调用失败,所以需要设置超时时长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值