Spring Cloid Ribbon服务的通信与负载均衡搭建

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。
通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

spring cloud ribbon 主要是对有集群的服务,进行选择访问。

  ribbon的访问机制有很多不多说,只说3个

    轮询 (RoundRobin):按照顺序访问集群中的服务。

    随机(Random):随机的访问集群中的服务。

    加权(Weighted):服务访问时间越长,它的权重值越小(权重值:就是个普通的值1,2,3,4,5这些值而已),权重值越小访问的几率越低。

Spring Cloud Ribbon的使用 

举个栗子:我有一个orders-server服务,和一个user-server-3000服务,user-server-3000服务做了集群user-server-3001

      orders-server服务要访问user-server服务。这时就需要Ribbon来实现权重均衡。轮询user-server-3000和user-server-3001服务

1.在orders-server导依赖

 <!--客户端负载均衡实现 ribbon-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

2.在orders-server配置类中添加代码

/**
     * @LoadBalanced给RestTemplate添加负载均衡的功能默认是轮询机制
   *
   * RestTemplate 提供了多种便捷访问远程Http服务的方法 *
@return */ @LoadBalanced @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); }

3.在Controller层的通行方法中把地址和端口号改为user-server集群的服务的名字。(user-server-3000和user-server-3001是集群,服务名字是一样的啊

//注入远程Http服务的方法
@Autowired
private RestTemplate restTemplate;
/**
     * 该方法是浏览器来调用
     *
     * @HystrixCommand:
     *
     * @param id
     * @return
     */
    @GetMapping("/order/user/{id}")
    public User getUserById(@PathVariable("id") Long id){
        System.out.println("OrderConsumerController.getUserById被调用了......");

        // String url = "http://http://localhost:3001/user/"+id;
        String url = "http://user-server/user/"+id;
        
        //url 访问地址;User.class:返回的数据类型
        User user = restTemplate.getForObject(url, User.class);
        return user;
    }

启动服务调用orders-server就行了。

修改负载均衡的机制:

如果要把轮询机制改成随机机制

在orders-server配置类中添加代码

/**
     * @LoadBalanced给RestTemplate添加负载均衡的功能
     *
     * RestTemplate 提供了多种便捷访问远程Http服务的方法
     * @return
     */
    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }


    @Bean
    public IRule ribbonRule() {
        return new RandomRule();//这里配置策略,和配置文件对应
    }

再次启动服务,就行了

原文地址:https://www.cnblogs.com/bigbigxiao/p/12115212.html