美文网首页
spring cloud 之 Ribbon

spring cloud 之 Ribbon

作者: _大叔_ | 来源:发表于2019-11-25 14:09 被阅读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);
       }
    }
    

    相关文章

      网友评论

          本文标题:spring cloud 之 Ribbon

          本文链接:https://www.haomeiwen.com/subject/rzwdwctx.html