RestTemplate调用负载的服务
1 2 3 4 5 6 7 8 9 10 11
| @Autowired private LoadBalancerClient loadBalancer;
@RequestMapping("/call") public String call() { // 查找服务 ServiceInstance serviceInstance = loadBalancer.choose("service-producer"); // 调用服务 String callServiceResult = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/hello", String.class); return callServiceResult; }
|
Ribbon负载均衡
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。Ribbon内置的负载均衡策略有多种,可以百度查找。
修改启动器类,注入 RestTemplate,并添加 @LoadBalanced 注解(用于拦截请求),以使用 ribbon 来进行负载均衡。
1 2 3
| // 调用服务, service-producer为注册的服务名称,LoadBalancerInterceptor会拦截调用并根据服务名找到对应的服务 String callServiceResult = restTemplate.getForObject("http://service-producer/hello", String.class); return callServiceResult;
|
http://service-producer/hello 服务名+方法名
修改策略
1 2 3 4
| #ribbon 负载均衡策略配置, service-producer为注册的服务名 service-producer: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
|
修改为随机策略