springcloud的负载均衡Ribbon入门

springcloud的负载均衡Ribbon入门

1.启用负载均衡

在Eureka中已经集成了Ribbon

只需要在consumer的引导类中的RestTemplate的配置方法上添加@LoadBalanced 注解:

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

2.修改调用方式

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

@Controller
@RequestMapping("consumer/user")
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    //@Autowired
    //private DiscoveryClient discoveryClient; // 注入discoveryClient,通过该客户端获取服务列表

    @GetMapping
    @ResponseBody
    public User queryUserById(@RequestParam("id") Long id){
        // 通过client获取服务提供方的服务列表,这里我们只有一个
        // ServiceInstance instance = discoveryClient.getInstances("test-provider").get(0);
        String baseUrl = "http://test-provider/user/" + id;
        User user = this.restTemplate.getForObject(baseUrl, User.class);
        return user;
    }

}

 3.修改负载均衡配置

在application.yml中

server:
  port: 80
spring:
  application:
    name: test-consumer
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8086/eureka
test-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

注意写法格式:

格式是:{服务名称}.ribbon.NFLoadBalancerRuleClassName:值,值就是IRule的实现类。