1 概述
- LoadBalancer: 被包含于spring cloud commons下用来替换以前的ribbon组件,一个客户端负载均衡器。不仅支持RestTemplate,还支持WebClient(Spring Web Flux中提供的功能,可以实现响应式异步请求)。
- 客户端负载均衡和服务端负载均衡有什么区别
- 服务端负载均衡:负载均衡在服务器上实现
- 客户端负载均衡:调用微服务接口的时候,会在注册中心获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务技术
2 Windows环境下Consul配置持久化
-
根路径下新增存储配置的文件夹 如
/mydata
-
根路径下建立一个脚本文件
consul_start.bat
@echo.服务启动...... @echo off @sc create Consul binpath= "F:\consul_1.19.0_windows_386\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect 1 -data-dir F:\consul_1.19.0_windows_386\mydata " @net start Consul @sc config Consul start= AUTO @echo.Consul start is OK......success @pause
-
之后启动consul就双击脚本文件启动即可,然后登入
localhost:8500
编写配置即可持久化
3 客户端服务调用负载均衡
- 引入负载均衡的依赖
<!--loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
-
修改consumer的controller,添加一个调用微服务的接口,例如下述代码
@GetMapping("/consumer/pay/get/info") public ResultData getConfigInfo(){ return restTemplate.getForObject(PaymentSrv_URL+"/pay/get/info",ResultData.class); }
-
访问测试
4 负载均衡算法
实际上使用默认的轮询就已经足够了
-
轮询 RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer
- 负载均衡算法:rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标 ,每次服务重启动后rest接口计数从1开始。
-
随机 RandomLoadBalancer implements ReactorServiceInstanceLoadBalancer
切换算法:
@Configuration
@LoadBalancerClient(
//下面的value值大小写一定要和consul里面的名字一样,必须一样
value = "cloud-payment-service",configuration = RestTemplateConfig.class)
public class RestTemplateConfig
{
@Bean
@LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
public RestTemplate restTemplate(){
return new RestTemplate();
}
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
}
标签:负载,day03,Consul,RestTemplate,cloud,均衡,consul,loadbalancer
From: https://www.cnblogs.com/yuqiu2004/p/18292927