Ribbon:自定义负载均衡

news/2024/11/16 7:26:43/

 

 自定义负载均衡算法

package com.kuang.myconfig;import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;import java.util.List;
import java.util.concurrent.ThreadLocalRandom;public class KuangRandomRule extends AbstractLoadBalancerRule {//每个机器,访问5次,换下一个服务//total=0,默认=0,如果等于5 我们指向下一个服务节点//index=0 ,默认0,如果total=5 index++, 若index>3 则index=0private int total=0;//被调用的次数private int currentIndex=0;//当前是谁在提供服务//   @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE")public Server choose(ILoadBalancer lb, Object key) {if (lb == null) {return null;}Server server = null;while (server == null) {if (Thread.interrupted()) {return null;}List<Server> upList = lb.getReachableServers();//获得活着的服务List<Server> allList = lb.getAllServers();//获得全部的服务int serverCount = allList.size();if (serverCount == 0) {return null;}//            int index = chooseRandomInt(serverCount);//生成区间随机数
//            server = upList.get(index);//活着的服务去获得某一个//=====================================================if (total<5){server = upList.get(currentIndex);total++;}else {total=1;currentIndex++;if (currentIndex>upList.size()-1){currentIndex=0;}server  =  upList.get(currentIndex);}//=====================================================if (server == null) {Thread.yield();continue;}if (server.isAlive()) {return (server);}// Shouldn't actually happen.. but must be transient or a bug.server = null;Thread.yield();}return server;}protected int chooseRandomInt(int serverCount) {return ThreadLocalRandom.current().nextInt(serverCount);}@Overridepublic Server choose(Object key) {return choose(getLoadBalancer(), key);}@Overridepublic void initWithNiwsConfig(IClientConfig clientConfig) {// TODO Auto-generated method stub}
}

Myconfig

package com.kuang.myconfig;import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class KuangRule {@Beanpublic IRule myRule(){return new KuangRandomRule();//默认是轮询;现在我们自定义为KuangRandomRule()}
}

主启动类

package com.kuang.springcloud;import com.kuang.myconfig.KuangRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;//Ribbon和Eureka 整合以后 ,客户端可以直接调用,不用关心IP地址和端口号~
@SpringBootApplication
@EnableEurekaClient
//在微服务启动的时候就能取加载我们自定义Ribbon类
@RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT",configuration = KuangRule.class )
public class DeptConsumer80 {public static void main(String[] args) {SpringApplication.run(DeptConsumer80.class,args);}
}

开启

Ribbon  实现负载均衡

http://www.ppmy.cn/news/1052905.html

相关文章

Python OGR 矢量操作

矢量数据的读取顺序&#xff1a;文件(datasource) → 图层(layer) → 特征(feature)、字段(field) 导入所需库 try:from osgeo import gdal, ogr, osr except:import gdal, ogr, osr 读取文件 ogr.RegisterAll() # 注册所有的驱动 datasource ogr.Open(shp_path, 0) # 0表…

vcs 运行后,一直打印ucli%, 如何解决? ---待解决

故障现象&#xff1a;运行完make vcs命令后&#xff0c;一直在terminal 下面出现ucli%的打印 故障原因&#xff1a;不知道&#xff1b; 解决办法&#xff1a; 暂无

IDEA中导入多module的Maven项目无法识别module的解决办法

首先举个栗子 这是正常的多module工程&#xff08;spring cloud项目&#xff09; 正常工程.png 这是导入出现问题的多module工程 导入出现问题的工程.png 原因&#xff1a; 出现该问题&#xff0c;是由于打开工程的时候IDEA只编译了最外层的pom.xml文件&#xff0c;而内部的…

python matlab 画坐标图

画一个坐标系&#xff0c;同时显示两条直线&#xff0c;效果图如下&#xff1a; 功能点&#xff1a; 同时显示两个纵坐标数据 显示图片名称 图片最大化保存 到本地 在图片某个位置显示字符信息 不同的线名称提示 代码如下&#xff1a; import matplotlib.pyplot as pltde…

【第16例】IPD开发流程:横向管理工具之袖珍卡

目录 前言 袖珍卡 作者介绍 相关课程 前言 IPD 本身是一个非常庞杂的体系,几乎涵盖了企业的方方面面。 不仅仅是华为,包括一些引入 IPD 的新星科技企业。 他们对 IPD 的引入也是走了先僵化再优化的一个过程。 比如说开始的阶段全盘照抄走流程,虽然也并不是特别理解这…

C++教程 - How to C++系列专栏第5篇

关于专栏 这个专栏是优质的C教程专栏&#xff0c;如果你还没看过第0篇&#xff0c;点击这里去第0篇 本专栏一致使用操作系统&#xff1a;macOS Ventura&#xff0c;代码编辑器&#xff1a;CLion&#xff0c;C编译器&#xff1a;Clang 感谢一路相伴的朋友们&#xff0c;感谢你…

Docker 的基本概念和优势,以及在应用程序开发中的实际应用

Docker 是一款开源的容器化平台&#xff0c;它可以将应用程序及其依赖项打包成一个运行环境&#xff0c;使得应用程序可以在任何地方运行&#xff0c;而不需要考虑底层系统的差异性。下面是 Docker 的基本概念和优势&#xff1a; 基本概念&#xff1a; Docker 镜像&#xff1…

【Nginx19】Nginx学习:FastCGI模块(一)基础配置

Nginx学习&#xff1a;FastCGI模块&#xff08;一&#xff09;基础配置 万众瞩目啊&#xff0c;总算到 FastCGI 了。看我文章和视频的各位大佬们8成以上都是 PHPer 吧&#xff0c;要做 PHP &#xff0c;FastCGI 的配置就少不了。CGI 、FastCGI 、PHP-FPM 这些概念&#xff0c;咱…