• nacos 负载均衡ribbon 轮询策略 权重2种方式


    NACOS.一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序

    负载均衡ribbon

    1.什么是Ribbon
    目前主流的负载方案分为以下两种:
    集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如Nginx)。
    客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。
    Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超
    时,重试等。通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法。
     

    公司看项目 注意点

    springCloud alibaba 版本

    ideal 配置nacos

    pom导入包

    1. #properties 写入下面版本
    2. <spring-boot.version>2.3.2.RELEASE</spring-boot.version>
    3. <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    4. <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
    5. #导入dependency依赖
    6. <dependency>
    7. <groupId>org.springframework.cloud</groupId>
    8. <artifactId>spring-cloud-dependencies</artifactId>
    9. <version>${spring-cloud.version}</version>
    10. <type>pom</type>
    11. <scope>import</scope>
    12. </dependency>
    13. <dependency>
    14. <groupId>com.alibaba.cloud</groupId>
    15. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    16. <version>${spring-cloud-alibaba.version}</version>
    17. <type>pom</type>
    18. <scope>import</scope>
    19. </dependency>

    配置yum

    1. server:
    2. port: 12000
    3. spring:
    4. application:
    5. name: stockserv
    6. cloud:
    7. nacos:
    8. discovery:
    9. server-addr: 192.168.64.200:8848
    10. username: nacos
    11. password: nacos
    12. namespace: public

    导入子项目依赖

    1. <dependency>
    2. <groupId>com.alibaba.cloud</groupId>
    3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    4. </dependency>

    编写订单的配置文件

    1. @Configuration
    2. public class RemoteConfig {
    3. @Bean
    4. public RestTemplate getAjax(){
    5. return new ResTemplate;
    6. }
    7. }
    8. 浏览器输入地址
    9. http://localhost:1201/order-server/addorder

    负载均衡

    http://localhost:1201/order-server/addorder

    轮询策略

    1. 轮询
    2. 区域轮询
    3. 区域分区
    4. 从事轮询
    5. 线性轮询

    方式1

    1. #Application中上面加这个注解
    2. @RibbonClients(value={
    3. @RibbonClient(name="stockserv",configuration= RibbonRule.class)
    4. })
    5. #不在applicaiton目录下 新建实体类RibbonRule
    6. @Configuration
    7. public class RibbonRule {
    8. //手动权重
    9. @Bean
    10. public IRule iRule(){
    11. return new NacosRule();
    12. }
    13. }

    方式二

    1. yum里面配置
    2. stockserv:
    3. ribbon:
    4. NFloadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

    --------------注意2种方法不能一起写*--------------

    实例

    1. #类似规则引擎。。。。。。。
    2. #自定义负载策略
    3. public class MyNacosRule extends AbstractLoadBalancerRule {
    4. @Autowired
    5. private NacosDiscoveryProperties nacosDiscoveryProperties;
    6. @Override
    7. public void initWithNiwsConfig(IClientConfig iClientConfig) {
    8. }
    9. @Override
    10. public Server choose(Object o) {
    11. //从注册中心上获取动态服务列表
    12. DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer();
    13. //获取服务名
    14. String serverName = lb.getName();
    15. //构建服务名实例
    16. NamingService ns = nacosDiscoveryProperties.namingServiceInstance();
    17. //nacos基于权重的算法
    18. try {
    19. Instance instance = ns.selectOneHealthyInstance(serverName);
    20. //放入服务器
    21. return new NacosServer(instance);
    22. } catch (NacosException e) {
    23. e.printStackTrace();
    24. }
    25. //如果出现问题 则返回用户null
    26. return null;
    27. }
    28. }

    配置yum

    1. stockserv:
    2. ribbon:
    3. NFloadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.MyNacosRule

    权重

    controller配置权重

    1. #1 controller配置系统权重
    2. #controller层 注意(configuration= RibbonRule.class 中修改为RibbonRule)
    3. #
    4. @SpringBootApplication
    5. //@RibbonClients(value={
    6. // @RibbonClient(name="stockserv",configuration= RibbonRule.class)
    7. //})
    8. public class OrderApplication {
    9. public static void main(String[] args) {
    10. SpringApplication.run(OrderApplication.class,args);
    11. }
    12. }
    13. #rules层 提供系统自带的权重 rules的位置不要和application一级
    14. @Configuration
    15. public class RibbonRule {
    16. //手动权重
    17. @Bean
    18. public IRule iRule(){
    19. // return new NacosRule();
    20. //自动权重
    21. return new RandomRule();
    22. }
    23. }
    24. #2 controller配置自定义权重
    25. #controller层
    26. 注意(configuration= MyNacosRule.class 中修改为MyNacosRule)
    27. #
    28. @SpringBootApplication
    29. //@RibbonClients(value={
    30. // @RibbonClient(name="stockserv",configuration= MyNacosRule.class)
    31. //})
    32. public class OrderApplication {
    33. public static void main(String[] args) {
    34. SpringApplication.run(OrderApplication.class,args);
    35. }
    36. }
    37. #rules层
    38. #提供自定义的权重 rules的位置不要和application一级
    39. #-----------------------------
    40. public class MyNacosRule extends AbstractLoadBalancerRule {
    41. @Autowired
    42. private NacosDiscoveryProperties nacosDiscoveryProperties;
    43. @Override
    44. public Server choose(Object o) {
    45. //从注册中心上获取动态服务列表
    46. DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer();
    47. //获取服务名
    48. String serverName = lb.getName();
    49. //构建服务名实例
    50. NamingService ns = nacosDiscoveryProperties.namingServiceInstance();
    51. //nacos基于权重的算法
    52. try {
    53. Instance instance = ns.selectOneHealthyInstance(serverName);
    54. //放入服务器
    55. return new NacosServer(instance);
    56. } catch (NacosException e) {
    57. e.printStackTrace();
    58. }
    59. //如果出现问题 则返回用户null
    60. return null;
    61. }
    62. @Override
    63. public void initWithNiwsConfig(IClientConfig iClientConfig) {
    64. }
    65. }

    yml配置权重

    1. #1 yum 中配置系统权重 (这个暂时不能用 )
    2. 注意(RibbonRule类别写错 NFLoadBalancerRuleClassName 这个注意大小写)
    3. stockserv:
    4. ribbon:
    5. NFLoadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.RibbonRule
    6. #rules层 提供系统自带的权重 rules的位置不要和application一级
    7. @Configuration
    8. public class RibbonRule {
    9. //手动权重
    10. @Bean
    11. public IRule iRule(){
    12. // return new NacosRule();
    13. //自动权重
    14. return new RandomRule();
    15. }
    16. }
    17. #2 yum 中配置自定义权重 注意(MyNacosRule类别写错 NFLoadBalancerRuleClassName 这个注意大小写)
    18. stockserv:
    19. ribbon:
    20. NFLoadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.MyNacosRule
    21. #rules层
    22. #提供自定义的权重 rules的位置不要和application一级
    23. #-----------------------------
    24. public class MyNacosRule extends AbstractLoadBalancerRule {
    25. @Autowired
    26. private NacosDiscoveryProperties nacosDiscoveryProperties;
    27. @Override
    28. public Server choose(Object o) {
    29. //从注册中心上获取动态服务列表
    30. DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer();
    31. //获取服务名
    32. String serverName = lb.getName();
    33. //构建服务名实例
    34. NamingService ns = nacosDiscoveryProperties.namingServiceInstance();
    35. //nacos基于权重的算法
    36. try {
    37. Instance instance = ns.selectOneHealthyInstance(serverName);
    38. //放入服务器
    39. return new NacosServer(instance);
    40. } catch (NacosException e) {
    41. e.printStackTrace();
    42. }
    43. //如果出现问题 则返回用户null
    44. return null;
    45. }
    46. @Override
    47. public void initWithNiwsConfig(IClientConfig iClientConfig) {
    48. }
    49. }

    如果不配置就走轮询策略!!!

  • 相关阅读:
    1、web自动化环境安装(selenium安装、卸载和Chromedriver下载、安装)
    linux自动化部署脚本讲解
    SpringBoot 一文搞懂Spring JPA
    4、Jvm(栈)
    代码签名证书适用于个人开发者吗?
    Redis客户端通信RESP协议
    【深度学习基础知识(一):卷积神经网络CNN基础知识】
    Java web应用性能分析之【自定义prometheus监控指标】
    [附源码]Python计算机毕业设计SSM开放实验室管理系统(程序+LW)
    国内低代码平台“定制化开发”能力较强的有哪些?
  • 原文地址:https://blog.csdn.net/weixin_42023748/article/details/126930668