微信开放平台官方网站,知名品牌logo标志设计解析,无为县住房和城乡建设局网站,快速网站排名优化SpringCloud之LoadBalancer负载均衡器的简单使用
loadbalancer用于对提供服务的集群做一个节点的选取规则。
如图所示#xff0c;load balancer集成在调用方 示例
创建loadbalance-base模块,并引入相关依赖
dependenciesdependencygroupIdorg.spr…SpringCloud之LoadBalancer负载均衡器的简单使用
loadbalancer用于对提供服务的集群做一个节点的选取规则。
如图所示load balancer集成在调用方 示例
创建loadbalance-base模块,并引入相关依赖
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bootstrap/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency
/dependencies版本信息
properties spring-boot.version2.4.2/spring-boot.versionspring-cloud-alibaba.version2021.1/spring-cloud-alibaba.versionnacos.version2021.1/nacos.versionspring-cloud.version2020.0.1/spring-cloud.versionspring-cloud-bootstrap.version3.0.3/spring-cloud-bootstrap.versionspring-cloud-loadbalancer.version3.0.1/spring-cloud-loadbalancer.version
/properties创建服务提供者模块loadbalancer-provider-service
主类
EnableDiscoveryClient
SpringBootApplication
public class LoadBalanceProviderApplication {public static void main(String[] args) {SpringApplication.run(LoadBalanceProviderApplication.class, args);}
}配置
spring:application:name: loadbalance-provider-servicecloud:nacos:config:group: loadbalance-groupnamespace: loadbalanceserver-addr: 192.168.56.102:8848file-extension: ymlprefix: ${spring.application.name}discovery:group: loadbalance-groupnamespace: loadbalanceserver-addr: 192.168.56.102:8848weight: 5server:port: 8082服务类
RestController
public class TestController {Value(${server.port})private int port;GetMapping(/service)public String test(){return provicer servvice: [from port]: port;}
}启动nacos创建响应的命名空间并开启多实例服务分别开启8081和8082的两个loadbalance-provider-service服务实例
创建loadbalancer-consumer-service
主类
SpringBootApplication
EnableDiscoveryClient
public class LoadBalanceConsumerApplication {public static void main(String[] args) {SpringApplication.run(LoadBalanceConsumerApplication.class, args);}
}restTemplate配置类,此处必须在restTemplate上加上LoadBalanced注解
Configuration
public class LoadConfiguration {BeanLoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}服务类,restTemplate调用host:port改为服务提供者的名称
RestController
public class TestController {Resourceprivate RestTemplate restTemplate;GetMapping(/service)public String test(){return restTemplate.getForObject(http://loadbalance-provider-service/service, String.class);}
}配置
spring:application:name: loadbalance-consumer-servicecloud:nacos:config:group: loadbalance-groupnamespace: loadbalanceserver-addr: 192.168.56.102:8848file-extension: ymlprefix: ${spring.application.name}discovery:group: loadbalance-groupnamespace: loadbalanceserver-addr: 192.168.56.102:8848weight: 1server:port: 9091启动loadbalacer-consumer-service服务
访问localhost:9091/service并多次刷新可以看到8081和8082两个服务交替
provicer servvice: [from port]:8081
provicer servvice: [from port]:8082
provicer servvice: [from port]:8081
provicer servvice: [from port]:8082
provicer servvice: [from port]:8081
provicer servvice: [from port]:8082
....Load Balancer提供的策略
RoundRobin 轮询策略意思循环往复的的服务进行选取。Random 随机策略随机对服务选取一个节点
Load Balancer的默认负载策略
RoundRobin: 轮询策略意思循环往复的的服务进行选取。
替换默认的负载策略使用随机策略模式
新建RandomLoadBalanceConfiguration配置类,将随机策略配置进去
public class RandomLoadBalanceConfiguration {Beanpublic ReactorLoadBalancerServiceInstance randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}按照官方说法配置类The classes you pass as LoadBalancerClient or LoadBalancerClients configuration arguments should either not be annotated with Configuration or be outside component scan scope.
配置类不能加Configuation注解或者要放在不被Spring容器扫描到的地方意思要放在和主类平级的包下不能放在主类的包或者子包。
在主类或者某个能被扫描到的配置类上加上LoadBalancerClients
配置全局策略
LoadBalancerClients(defaultConfiguration WeightLoadBalanceConfiguration.class)针对服务配置策略
LoadBalancerClients({LoadBalancerClient(name loadbalance-provider-service, configuration RandomLoadBalanceConfiguration.class)
})