山西响应式网站建设制作,网站开发一般用哪种语言,wordpress 浮动定位,WordPress的数据库建表文章目录 Ribbon 负载均衡器环境搭建1.依赖2.配置3.修改其默认的负载均衡策略3.1 验证 4.创建自定义的Rule4.1 MyRule#xff08;#xff09;4.2 在配置config类中配置 5.饥饿加载6.我只想访问不想被别的访问 Ribbon 负载均衡器
背景 Ribbon 是一个用于客户端负载均衡的开源… 文章目录 Ribbon 负载均衡器环境搭建1.依赖2.配置3.修改其默认的负载均衡策略3.1 验证 4.创建自定义的Rule4.1 MyRule4.2 在配置config类中配置 5.饥饿加载6.我只想访问不想被别的访问 Ribbon 负载均衡器
背景 Ribbon 是一个用于客户端负载均衡的开源库它是 Netflix 开源的一部分目前由 Spring Cloud 托管和维护。Ribbon 的主要作用是在微服务架构中管理客户端之间的负载均衡。 作用 作为一个负载均衡器Ribbon 可以将客户端发起的请求分发到多个服务提供者实例中以实现负载均衡和高可用性。它可以根据配置的负载均衡策略在请求发起时选择一个合适的服务提供者实例使请求能够均匀地分布到不同的实例上从而提高系统的性能和可扩展性。
负载均衡策略
RoundRobinRule轮询策略依次选择每个服务提供者实例。 RandomRule随机策略随机选择一个服务提供者实例。 WeightedResponseTimeRule根据平均响应时间和实例权重进行选择。 BestAvailableRule优先选择可用性最好的实例。 ZoneAvoidanceRule避免选择故障区域的实例。 此外Ribbon 还支持自定义负载均衡策略通过实现 IRule 接口可以编写自定义的负载均衡规则。 拓展 在 Spring Cloud 中通过引入 spring-cloud-starter-netflix-ribbon 依赖可以方便地使用 Ribbon 进行客户端负载均衡。 需要注意的是从 Spring Cloud 2020 年版本开始官方推荐使用 Spring Cloud LoadBalancer 替代 Ribbon 进行客户端负载均衡。因此在最新的项目中建议使用 Spring Cloud LoadBalancer 来实现负载均衡的功能。
环境搭建
上一篇采用的搭建环境的方法传送至上一篇 在之前的基础上需要加入一行新的配置即可 如果新建一个项目加入下方依赖即可
spring boot 版本 2.3.11.RELEASE 对应采用的springcloud propertiesjava.version1.8/java.versionspring.cloud.versionHoxton.SR8/spring.cloud.versionspring.cloud.alibaba.version2.2.5.RELEASE/spring.cloud.alibaba.version/properties1.依赖
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency2.配置
配置 application.properties
spring.application.nameribbon-a
server.port 3030
#Nacos服务发现注册中心
spring.cloud.nacos.discovery.server-addr192.168.14.3:8848logging.level.com.hb debug3.修改其默认的负载均衡策略
轮询 —— 随机 【ps其他的也可自行设置】 配置config文件修改默认 策略
Configuration
public class MyRuleConfig {Beanpublic IRule rule(){return new RandomRule();}
}3.1 验证
开启两个nacos都在统一命名空间下一个打包以cmd 运行一个idea运行 1.打包文件 在这里插入图片描述
2.进入该文件夹中# 3.记得打开的时候进入 target目录下 4.创建自定义的Rule
4.1 MyRule
Component
Slf4j
public class MyRule extends AbstractLoadBalancerRule {Autowiredprivate NacosDiscoveryProperties nacosDiscoveryProperties;Autowiredprivate NacosServiceManager nacosServiceManager;private static AtomicInteger count new AtomicInteger(0);OverrideSneakyThrowspublic Server choose(Object key) {String group this.nacosDiscoveryProperties.getGroup();DynamicServerListLoadBalancer loadBalancer (DynamicServerListLoadBalancer)getLoadBalancer();String name loadBalancer.getName();NamingService namingService nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());ListInstance instances null;instances namingService.selectInstances(name, group, true);if (CollectionUtils.isEmpty(instances)) {log.warn(no instance in service {}, name);return null;}Instance maxInstance instances.stream().max(Comparator.comparing(Instance::getWeight)).get();Instance minInstance instances.stream().min(Comparator.comparing(Instance::getWeight)).get();int count2 count.addAndGet(1);int mod count2 % 4; //取模运算 5,10,1520,25 ...if (mod 0) {log.debug(count{},mod{},使用min,count2, mod);return new NacosServer(minInstance);} else {log.debug(count{},mod{},使用max,count2, mod);return new NacosServer(maxInstance);}}Overridepublic void initWithNiwsConfig(IClientConfig iClientConfig) {}
}
4.2 在配置config类中配置
下方是访问4次三次调用权重最大的一次访问权重最小的 结果 也可以在peroperties文件中配置还可以配置全局的但是在我这个版本不行 这里只配置啦命名空间为nacos-a的 nacos-a.ribbon.NFLoadBalancerRuleClassNamecom.hb.rule.MyRule5.饥饿加载
在进行服务调用的时候如果网络情况不好第一次调用会超时。 Ribbon默认懒加载意味着只有在发起调用的时候才会创建客户端。 开启饥饿加载解决第一次调用慢的问题:
ribbon:
eager-load:
# 开启ribbon饥饿加载
enabled: true
# 配置order-service使用ribbon饥饿加载多个使用逗号分隔
clients: order-service开启饥饿加载会在系统加载类的过程中与连接池进行链接
6.我只想访问不想被别的访问
application.properties 配置文件中加入这个即可 spring.cloud.nacos.discovery.register-enabledtrue