Skip to content

Ribbon

负载均衡客户端配置,ribbon是通过一定的算法,实现了客户端的负载均衡策略

一、依赖

<!--ribbon客户端依赖-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

二、负载均衡随机配置

随机回去服务器的服务,而不是轮询

product-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

三、配置bean

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

四、通过RestTemplate调用接口

使用@Autowired注解,将对象生成,然后调用返回相应的数据。有两种方式实现。 第一种直接通过restTemplate调用http请求。

@Autowired
private FeignClientTest feignClientTest;

public Map<String,Object> query(Long id){
    //返回的数据
    String response= restTemplate.getForObject("http://service-name/getByid?id="+id,String.class);
    //ObjectMapper对象
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        //转成jsonNode
        JsonNode jsonNode = objectMapper.readTree(response);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

第二种,通过LoadBalancerClient类调用

@Autowired
private LoadBalancerClient loadBalancer;

public Map<String,Object> query(Long id){
    //通过loadBalancer获取对应服务的服务器信息
    ServiceInstance instance = loadBalancer.choose("service-name");
    //拼接URL
    String url = String.format("http://%s:%s/getById?id=" + id,instance.getHost(),instance.getPort());
    RestTemplate restTemplate = new RestTemplate();
    String response = restTemplate.getForObject(url,String.class);
    //ObjectMapper对象
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        //转成jsonNode
        JsonNode jsonNode = objectMapper.readTree(response);
    } catch (IOException e) {
        e.printStackTrace();
    }
}