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();
}
}