Day52 微服务 负载均衡 ***
负载均衡Ribbon简介
-
(1)什么是负载均衡 负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行 本质:负载均衡是一个算法,可以通过该算法实现从地址列表中获取一个地址进行服务调用。 (2)在Spring Cloud中提供了负载均衡器:Ribbon 美[ˈrɪbən] (3)Ribbon提供了轮询、随机两种负载均衡算法(默认是轮询)可以实现从地址列表中使用负载均衡算法获取地址进行服务调用。
Ribbon负载均衡应用
-
(1)实际环境中,往往会开启很多个user-service 的集群。此时获取的服务列表中就会有多个,到底该访问哪一个呢? (2)可以使用Ribbon负载均衡:在执行RestTemplate发送服务地址请求的时候,使用负载均衡拦截器拦截,根据服务名获取服务地址列表,使用Ribbon负载均衡算法从服务地址列表中选择一个服务地址,访问该地址获取服务数据。
Ribbon负载均衡应用
-
(1)我们配置启动两个user-service 实例,一个8001,一个8002 (2)实现步骤:
- 启动多个user-service实例(8001,8002);
- 修改RestTemplate实例化方法,添加负载均衡注解;
- 修改ConsumerController;
- 测试
-
(3)注意事项: 服务名称中不能出现_,可以考虑去掉或者改成-
application.properties
# service name spring.application.name=demo01-provider-user # server port # load balance server.port=${port:8001}
@LoadBalanced
在cosumer的启动类中
@Bean //1 产生多个provider实例 8001 8002 @LoadBalanced //2设置当前方法的返回对象,使用负载均衡算法 public RestTemplate getRt() { RestTemplate rt = new RestTemplate(); return rt; }
CosumerController
@RequestMapping(path = "/{id}", method = RequestMethod.GET) public Object get(@PathVariable long id) { //3:此处不能写死 provider的 ip,port ,只能写服务名。不能使用_,替换成- String url = "http://demo01-provider-user/users/11";//参1 地址 String json = rt.getForObject(url, String.class);//参2:数据要转换成什么类型 return json; }
测试
请求 8001 8002 http://localhost:8001/users/11 http://localhost:8002/users/11 请求 81 http://localhost:81/consumer/11
下一篇:
架构道术-时间的力量有多大