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里面开启熔断器处理时,需要有以下配置:

eureka: http://peer1:8082/eureka/
spring:
  application:
    name: service-feign
  hystrix:
    enabled: true
    client:
      service-url:
       defaultZone: 
       
 server:
  port: 8083
 
//熔断器的配置就拿一个订单的熔断器来说,需要继承相应的订单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;
    }
 
}

猜你喜欢

转载自blog.csdn.net/weixin_41003771/article/details/106099490