Ribbon
负载均衡客户端配置,ribbon是通过一定的算法,实现了客户端的负载均衡策略
一、依赖
xml
<!--ribbon客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>二、负载均衡随机配置
随机回去服务器的服务,而不是轮询
yaml
product-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule三、配置bean
java
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}四、通过RestTemplate调用接口
使用@Autowired注解,将对象生成,然后调用返回相应的数据。有两种方式实现。 第一种直接通过restTemplate调用http请求。
java
@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类调用
java
@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();
}
}