首页 > 编程语言 >springcloud - ribbon简单提点 + 手写轮询算法

springcloud - ribbon简单提点 + 手写轮询算法

时间:2023-07-06 21:24:13浏览次数:39  
标签:int springcloud 轮询 next current ribbon size

ribbon(依然有人使用,还是很难替换掉) 负载均衡 + restTemplate实现rpc远程调用

新版eureka依赖集成好了ribbon,可以不用重新导入

consumer远程调用provider使用到了一个resttemplate类 在消费者端的consumer中调用

     @Resource
     private RestTemplate restTemplate;

// 手写轮询算法  轮询算法核心代码行为取模运算获取需要调用的服务器的具体实例

 @Component
 public class MyBalanceRule implements LoadBalance {
 ​
     // 用来计数接口调用次数的计数器
     private AtomicInteger counter = new AtomicInteger(0);
 ​
     // counter的最大长度
     private final int MAX_LENGTH = Integer.MAX_VALUE;
 ​
     // 获取并
     public final int getAndIncrement() {
         int current = 0;
         int next = 0;
 ​
         do{
             current = counter.get();
             next = (current > MAX_LENGTH) ? 0 : current + 1;
         } while (!this.counter.compareAndSet(current,next));
 ​
         System.out.println("服务器选举次数 : " + next);
         return next;
     }
 ​
     @Override
     public ServiceInstance getServiceInstance(List<ServiceInstance> serviceInstances) {
         int index = getAndIncrement();
         int size = serviceInstances.size();
         if(size == 0){
             System.out.println("没有服务器");
             return null;
         }
         return serviceInstances.get(index);
     }
 }

轮询的使用

     @Resource
     private LoadBalance loadBalance;
 ​
     @GetMapping(value = "consumer/payment/lb")
     public String getPaymentLb(){
 ​
         List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
         int size = instances.size();
         if(size <= 0){
             return "没有服务注册到服务中心,请先注册服务...";
         }
         ServiceInstance currInstance = loadBalance.getServiceInstance(instances);
 ​
         URI uri = currInstance.getUri();
 ​
         return restTemplate.getForObject(uri + "/payment/lb",String.class);
     }

标签:int,springcloud,轮询,next,current,ribbon,size
From: https://www.cnblogs.com/huoziqi/p/17533367.html

相关文章

  • springcloud - consul的简单使用和配置
    第一步:导入依赖 <!--   consul-->     <dependency>       <groupId>org.springframework.cloud</groupId>       <artifactId>spring-cloud-starter-consul-discovery</artifactId>     </dependency>第二......
  • springcloud - zookeeper的基本配置和使用
     第一步:导入依赖     <dependency>       <groupId>org.springframework.cloud</groupId>       <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>       <!--排除启动器中配置好的版本-->    ......
  • Flask框架:运用Ajax轮询动态绘图
    Ajax是异步JavaScript和XML可用于前后端交互,在之前《Flask框架:运用Ajax实现数据交互》简单实现了前后端交互,本章将通过Ajax轮询获取后端的数据,前台使用echart绘图库进行图形的生成与展示,后台通过render_template方法返回一串JSON数据集,前台收到后将其应用到绘图库上,实现动态监控内......
  • springcloud - 工程相关步骤以及提取公共部分
    1.创建父工程 配置pom文件删除src文件2.创建子模块配置pom文件3.配置yml文件4.创建启动类5.业务实现当出现公共代码时可以进行提取 例如实体类或者通用工具类等,如下图,提取成一个单独的模块先点击clean  然后点击install,最后将包导入到需要的子模块中实现相互......
  • springcloud 可能会用到的依赖
    springcloud需要上官网看版本适配不然可能会出现意想不到的问题此笔记使用maven版本 3.8.4<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"x......
  • 一定要收藏的5个优秀的SpringCloud开源项目
    今天再为大家推荐几个优秀的SpringCloud开源脚手架项目,开箱即用,不管是学习还是开发新项目,都非常不错。伟大的作家鲁迅先生曾说过:能直接用,绝不重复造轮子 img好了,不多bb,上才艺!1、pig基于SpringCloud2020、SpringBoot2.5、OAuth2的RBAC权限管理系统。gitee......
  • 介绍6款热门的SpringCloud微服务开源项目,总有适合你的!
    今天介绍六款比较热门的SpringCloud微服务项目,感兴趣的可以clone下来研究一下,相信对你学习微服务架构很有帮助。一、Cloud-Platform介绍Cloud-Platform是国内首个基于SpringCloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关AP......
  • SpringBoot SpringCloud Nacos等一些组件版本对应
    毕业版本依赖关系(推荐使用)由于SpringBoot2.4+和以下版本之间变化较大,目前企业级客户老项目相关SpringBoot版本仍停留在SpringBoot2.4以下,为了同时满足存量用户和新用户不同需求,社区以SpringBoot2.4为分界线,同时维护2.2.x和2021.x两个分支迭代。2021.x分支......
  • 【.Net/C#之ChatGPT开发系列】四、ChatGPT多KEY动态轮询,自动删除无效KEY
    ChatGPT是一种基于Token数量计费的语言模型,它可以生成高质量的文本。然而,每个新账号只有一个有限的初始配额,用完后就需要付费才能继续使用。为此,我们可能存在使用多KEY的情况,并在每个KEY达到额度上限后,自动将其删除。那么,我们应该如何实现这个功能呢?还请大家扫个小关。......
  • SpringCloud学习(四)
    参考:https://blog.csdn.net/qq_25928447/article/details/124340264?spm=1001.2014.3001.5501消息队列之前如果需要进行远程调用,一般可以通过发送HTTP请求来完成,现在,可以使用第二种方式,就是消息队列,它能够将发送方发送的信息放入队列中,当新的消息入队时,会通知接收方进行处理......