使用 LoadBalancerClient 负责均衡客户端时:
情况一:
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/test")
private String test(){
String url = "http://%s:%s/say?msg=123";
String host = loadBalancerClient.choose("springcloud-provider").getHost();
int port = loadBalancerClient.choose("springcloud-provider").getPort();
url = String.format(url,host,port);
return restTemplate.getForObject(url,String.class);
}
}
流程:通过 LoadBalancerClient 获取 IP、端口号,补全 url 的信息,再通过 RestTemplate 发送请求,且 LoadBalancerClient 遵守 IRule 负载均衡策略。
@Bean // 配置Ribbon负载均衡算法
public IRule getIRule(){
// 随机负载均衡算法
IRule rule = new RandomRule();
// 2.权重响应时间分配规则 代替ResponseTimeRule 响应时间加权策略
// WeightedResponseTimeRule responseTimeRule=new WeightedResponseTimeRule();
// 3.最低并发策略 分配的时候选择目前并发量最小的
// BestAvailableRule bestAvailableRule=new BestAvailableRule();
// 4.轮训策略
// RoundRobinRule rule=new RoundRobinRule();
// 5.重试策略 如果在配置时间内,无法选择服务,尝试选择一个服务 重试机制
// RetryRule retryRule=new RetryRule();
// 6.区域感知策略 就近访问
// ZoneAvoidanceRule zoneAvoidanceRule=new ZoneAvoidanceRule();
// 7.可用过滤策略 可用根据阈值进行服务过滤
// AvailabilityFilteringRule filteringRule=new AvailabilityFilteringRule();
return rule;
}
情况二:给 RestTemplate 实例添加 @LoadBalanced 注解,会拦截 RestTemplate 发送的请求,并会根据请求中的 serviceId ,遵守 负载均衡策略 替换为 对应的 ip 和端口号。
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
如果请求中没有 serviceid ,这会提示:
标签:String,LoadBalanced,RestTemplate,url,LoadBalancerClient,new,注解,public From: https://www.cnblogs.com/lld01/p/18435305No instances available