Ribbon是Neflix提供的一个基于HTTP和TCP的客户端负载均衡
Ribbon两个功能:
- 负载均衡算法再服务端
- 由负载均衡维护服务地址列表

- 负载均衡算法再客户端
- 客户端维护服务地址列表

这里使用到eureka的consumer provider和server具体搭建参考
spirngcloud Eureka服务治理(注册中心)实操_爱画图的小火纸的博客-CSDN博客
- 在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced
- 在使用restTemplate发起请求时,需要定义url时,host:port可以替换为 服务提供方的应用名
1.添加注解@LoadBalanced

2.host:port可以替换为 服务提供方的应用名
- @RestController
- @RequestMapping("/order")
- public class OrderController {
-
- @Autowired
- private RestTemplate restTemplate;
-
- @Autowired
- private DiscoveryClient discoveryClient;
-
- @GetMapping("/goods/{id}")
- public Goods findGoodsById(@PathVariable("id") int id){
-
- //host:port可以替换为 服务提供方的应用名
- String url = "http://EUREKA-PROVIDER/goods/findOne/"+id;
-
- //3.调用方法
- Goods goods = restTemplate.getForObject(url,Goods.class);
-
- return goods;
-
- }
- }

为了方便监控消费者调用了哪个服务,注入port监控

打开使程序可并行按钮,可以一个程序运行同时运行两个

将provider服务开启两次,第二次开始时修改端口,再此打开即可有两个程序运行(模拟两个服务)
启动步骤:
- 启动次序为 server ——>provider ——> 修改provider端口号8001后再启动 ——> consumer
- 刷新consumer web界面 所调用的服务在改变 可根据port的改变监控到

共7种 默认轮询
负载均衡算法在客户端

编写类MyRule
- //设置负载均衡的规则
- @Configuration
- public class MyRule {
- @Bean
- public IRule rule(){
-
- return new RandomRule();
- }
- }
在consumer的启动类添加注解
- @EnableDiscoveryClient //激活DiscoveryClient 可无
- //启动类
- @EnableEurekaClient //可无
- @SpringBootApplication
-
- /*
- * 配置Ribbon的负载均衡策略
- * name 设置服务提供方的应用名称
- * configuration 设置负载均衡Bean
- * */
-
- @RibbonClient(name="EUREKA-PROVIDER",configuration = MyRule.class)
- public class ConsumerApp {
- public static void main(String[] args){
- SpringApplication.run(ConsumerApp.class,args);
- }
- }
consumer添加配置yml文件中
- #配置的方式设置Ribbon的负载均衡策略
- EUREKA-PROVIDER: #设置的服务提供方的 应用名称
- ribbon:
- NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #策略类

这个端口随机显示意思就是消费者随机使用eureka里的服务 ,修改负载均衡策略成功