SpringCloud--05、负载均衡Robbin

版权声明:转载 请注明 原始链接 https://blog.csdn.net/sswqzx/article/details/84780547

1、Robbin概述

Robbin是 Netflixfa 发布的一个负载均衡器、SpringCloud 中,Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能

负载均衡策略:

(1) 简单轮询负载均衡 
(2) 加权响应时间负载均衡 
(3) 区域感知轮询负载均衡 
(4) 随机负载均衡

2、实例演示

首先我们启动三个user-service实例,一个8081,一个8082 、一个8083

以相同的方法创建二个user-service

创建好后:

 Eureka监控面板:

开启负载均衡:

因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。直接修改代码

在Customer-service的RestTemplate的配置方法上添加@LoadBalanced注解:

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

修改调用方式,不再手动获取ip和端口,而是直接通过服务名称调用:

@Service
public class UserService {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    public List<User> queryUserByIds(List<Long> ids) {
        List<User> users = new ArrayList<>();
        // 地址直接写服务名称即可
//根据service名称,获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor
        String baseUrl = "http://user-service/user/";
        ids.forEach(id -> {
            // 我们测试多次查询,
            users.add(this.restTemplate.getForObject(baseUrl + id, User.class));
            // 每次间隔500毫秒
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        return users;
    }
}

访问:

根据service名称,获取到了服务实例的ip和端口。LoadBalancerInterceptor处理映射service名和ip+端口号

使用 RibbonLoadBalanceClient来进行负载均衡(负载均衡算法处理)

猜你喜欢

转载自blog.csdn.net/sswqzx/article/details/84780547
今日推荐