spring cloud 之 Ribbon

2019-11-25  本文已影响0人  _大叔_

一、对比

RPC
  远程过程调用,像调用本地方法一样调用服务器的服务
  支持同步或异步
  客户端和服务器之间建立TCP连接,可以一次建立一个,也可以多个调用复用一次连接
  RPC数据包小
   谷歌 protobuf 以二进制方式传输
  比较复杂要进行:编码,解码,序列化,连接,丢包,拆包,组合,协议制定
Rest(HTTP)
  HTTP请求,支持多种协议和功能
  开发方便成本低
  http数据包大
  java 开发:HttpClient URLConnection

二、开发

引入依赖

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

在application种配置

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

修负载均衡改策略

    /**
     * 功能描述: 负载均衡策略
     * RoundRobinRule:轮询
     * RandomRule:随机
     * AvailabilityFilteringRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,以及并发的连接数量
     * 超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;
     * WeightedResponseTimeRule: 根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的机率越高;
     * 刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够时,会切换到WeightedResponseTimeRule
     * RetryRule: 先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务;
     * BestAvailableRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;
     * ZoneAvoidanceRule: 默认规则,复合判断server所在区域的性能和server的可用性选择服务器;
     * @return : com.netflix.loadbalancer.IRule
     * @author : big uncle
     * @date : 2019/9/7 14:07
     */
    @Bean
    public IRule myRule(){
        //自定义均衡策略
        return new RandomRule();
    }

实际调用

/**
* 订单消费服务
* @author shengwu ni
*/
@RestController
@RequestMapping("/consumer/order")
public class OrderConsumerController {

   /**
    * 订单服务提供者模块的 url 前缀
    */
//    private static final String ORDER_PROVIDER_URL_PREFIX = "http://localhost:8001";
   private static final String ORDER_PROVIDER_URL_PREFIX = "http://MICROSERVICE-ORDER";

   @Resource
   private RestTemplate restTemplate;

   @GetMapping("/get/{id}")
   public TOrder getOrder(@PathVariable Long id) {

       return restTemplate.getForObject(ORDER_PROVIDER_URL_PREFIX + "/provider/order/get/" + id, TOrder.class);
   }
}
上一篇下一篇

猜你喜欢

热点阅读