自定义Eureka集群负载均衡策略-程序员宅基地

技术标签: SpringCloud  

640?wx_fmt=gif
学习更多Java干货,戳上面的
蓝色字题
关注我!

相信看了 前两篇的同学都了解到了我的套路,没错,本篇博客同样是为了解决上篇的问题的。

上篇我们使用Eureka默认的负载均衡解决了消费方调用服务方硬编码的问题,不过呢,因为是使用的默认负载均衡的策略,所以这次我们就搞一搞事情,来自定义一下它的策略。

搞这个策略呢有两种实现方式

1

通过代码自定义




通过代码的方式自定义负责均衡策略时需要注意的是,注意避免SpringBoot的包扫描,因为自定义的规则必须在Eureka的规则实例化以后再实例化才会生效,那么这样就有两种方式,

第一种
1.在CloudDemoConsumerApplication类上级新建包config,然后新建LoanBalanced类。使用此类注册一个IRule以达到替换Eureka的目的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package cn.org.config;

import com.netflix.loadbalancer.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class LoadBalanced {
@Bean
public IRule ribbonRule() {
return new RoundRobinRule(); //轮训
// return new WeightedResponseTimeRule(); //加权权重
//return new RetryRule(); //带有重试机制的轮训
//return new RandomRule(); //随机
//return new TestRule(); //自定义规则
}
}

2.注意包名,CloudDemoConsumerApplication的包名是cn.org.zhixiang。

3.想使用哪种负载均衡策略就new哪一种就ok

4.TestRule为自定义的规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package cn.org.config.domain;

import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;

import java.util.List;

public class TestRule implements IRule {

private ILoadBalancer loadBalancer;
@Override
public Server choose(Object o) {
List<Server> servers= loadBalancer.getAllServers();
return servers.get(0);
}

@Override
public void setLoadBalancer(ILoadBalancer iLoadBalancer) {
this.loadBalancer=iLoadBalancer;
}

@Override
public ILoadBalancer getLoadBalancer() {
return this.loadBalancer;
}
}

如果有自定义的需求的话可以参照这个写法,我这只是测试使用,取的服务列表的第一个。

5.在CloudDemoConsumerApplication类上添加注解
@RibbonClient(name = "provider-demo", configuration = cn.org.config.LoadBalanced.class)
指定provider-demo服务使用的是LoadBalanced类提供的规则

2

第二种




依旧把LoadBalanced放到cn.org.zhixiang包下,不过呢通过自定义注解来解决包扫描的问题

1.自定义一个注解
public @interface ExcludeFromComponentScan { }
2.类使用刚才自定义的注解标示

1
2
3
4
5
6
7
8
9
10
11
12
@Configuration
@ExcludeFromComponentScan
public class AvoidLoanbalanced {
@Bean
public IRule ribbonRule() {
return new RoundRobinRule(); //轮训
// return new WeightedResponseTimeRule(); //加权权重
//return new RetryRule(); //带有重试机制的轮训
//return new RandomRule(); //随机
//return new TestRule(); //自定义规则
}
}

3.Application中指定包扫描忽略使用上方注解的类,然后注册规则

1
2
@RibbonClient(name = "provider-demo", configuration = AvoidLoanbalanced.class)
@ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = ExcludeFromComponentScan.class) })

注意:上方两种方式使用一种就够了。

使用配置文件自定义

1
2
3
4
5
`#为服务Id名称为provider-demo的项目配置负载均衡规则为com.netflix.loadbalancer.WeightedResponseTimeRule

provider-demo:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

当然,自定义负载均衡策略只需要选择代码或配置文件自定义其中的一种就可以了。毕竟美酒虽好,可不要贪杯哦。

 

点击下方“阅读原文”查看源码!!!


640?wx_fmt=gif

推荐阅读

640?wx_fmt=jpeg

 点赞收藏转发好看再走呗!

640?wx_fmt=gif


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/javaxuexilu/article/details/100738472

智能推荐

手游外挂分类及原理介绍_安卓外挂-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏29次。一、前言移动游戏市场近几年突然爆发,收入规模快速增长。根据第三方数据统计,如图所示,国内移动游戏2015年市场规模已达514.6亿。如此火热的市场,必然会吸引大量图谋不轨的坏人。外挂已在移动市场悄然兴起。目前移动游戏市场上,有多方需求在催促外挂的发展。比如打金工作室,想更高效地刷取游戏货币;大量屌丝玩家,想花少量的钱得到更大快感;竞品公司或者恶意玩家,想恶意破坏游戏正常活动运营。这类外挂会影响到游戏开发商的收益及游戏玩家的体验。作为移动游戏从业者,必须开始了解外挂,关注外挂。本篇幅着重介绍下._安卓外挂

hostapd_cli命令源码分析_hostapd_cli源码-程序员宅基地

文章浏览阅读7.1k次。hostapd提供了控制命令hostapd_cli,使用方法可以查看usage。源码中的main函数:int main(int argc, char *argv[]){ int warning_displayed = 0; int c; int daemonize = 0; if (os_program_init())//不同操作体统平台下执行不同的环境初始化_hostapd_cli源码

unity 用Box Collider为物体添加碰撞范围_box colider z 轴-程序员宅基地

文章浏览阅读1w次。游戏中,人物和桌子可以相碰,一个球和某个铁桶也可以相碰,这里,用一个最基础和常用的碰撞来做一个简单的演示。_box colider z 轴

常用加密算法解析-程序员宅基地

文章浏览阅读819次,点赞6次,收藏8次。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。

区分innerHeight与pageYOffset、innerWidth与pageXOffset_offset innerwidth-程序员宅基地

文章浏览阅读470次。它们都是window上的对象:(1)innerHeight属性:窗口中文档显示区域的高度,该属性可读可写。但IE不支持该属性, IE中body元素的clientHeight属性,它与innerHeight属性相同。(2)innerWidth属性:窗口中文档显示区域的宽度,同样不包括边框。该属性可读可写。但IE不支持该属性,IE中body元素的clientWidth属性与该属性相同。注意:cl..._offset innerwidth

80x86 汇编语言:键入0~255之间的数,显示对应的二进制和十六进制数_汇编获取键盘上的二进制数-程序员宅基地

文章浏览阅读2.8k次。汇编语言:从键盘输入一个0~255之间的整数,并显示出对应该数的二进制和十六进制数。1、在屏幕提示:“please input a number(0~255): ”后,输入一个0~255之间的整数。若所输入的数不在此范围内,或输入其它字符,则屏幕提示:“input a invalid number, exit!”。2、在屏幕上显示出对应该数的二进制和十六进制数。例如:127 = 011_汇编获取键盘上的二进制数

随便推点

python爬取图片(正则、bs4、Xpath三种方法)_爬出图片-程序员宅基地

文章浏览阅读3.3k次。本文给出爬取三个图片网站的案例,分别用到了正则表达式、bs4、Xpath三种解析方式。目录案例一:正则表达式解析案例二: bs4解析案例三: Xpath解析案例一:正则表达式解析 需求:爬取挖好图网”唯美分类“中的图片 详细代码如下:# coding=gbkimport requestsimport reimport os#需求:爬取挖好图唯美图片#网址:'https://www.wahaotu.com/weim..._爬出图片

服务器遭到SYN攻击怎么办?如何防御SYN攻击?_protected servers under syn attack-程序员宅基地

文章浏览阅读537次。SYN洪水攻击是DDOS攻击中最常见的攻击类型之一。是一种利用TCP 协议缺陷,攻击者向被攻击的主机发送大量伪造的TCP连接请求,从而使得被攻击方主机服务器的资源耗尽(CPU 满负荷或内存不足) 的攻击方式。SYN攻击的目标不止于服务器,任何网络设备,都可能会受到这种攻击,针对网络设备的SYN攻击往往会导致整个网络瘫痪。企业遭到SYN攻击该如何防御呢?今天就来分享一下如何利用iptables来缓解SYN攻击。1、修改等待数sysctl -w net.ipv4.tcp_max_syn_backlog=2_protected servers under syn attack

2024年【高压电工】新版试题及高压电工模拟试题-程序员宅基地

文章浏览阅读856次,点赞12次,收藏9次。11、【单选题】 电流互感器二次绕组铁芯和外壳都必须(),以防止一、二次线圈绝缘击穿时,一次侧的高压窜入二次侧,危及人身和设备的安全。72、【单选题】钳形电流表测量时,量程置于5A档,被测导线在钳口中绕了一圈,此时读数为2A,则被导线中交流电流的有效值为()。36、【单选题】伺服系统的发展趋势是交流替代直流、数字替代模拟、采用新型电力电子器件、高度集成化、智能化、简易化、、网络化。45、【单选题】已知两个正弦量为i1=10sin(314t+90°)安,i2=10sin(628t+30°)安,则()。

【python】python 打印时间 python打印程序运行时间_python打印时间-程序员宅基地

文章浏览阅读7.1k次,点赞4次,收藏7次。1、python 打印时间import timeprint('my name:%s'%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))print('my name2:%s'%time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))..._python打印时间

计算机与网络版面费,全国计算机级网络技术最新版笔试电子教材(完全免费版).doc...-程序员宅基地

文章浏览阅读135次。全国计算机级网络技术最新版笔试电子教材(完全免费版)第一章 计算机基础本单元概览一、计算机概述。二、计算机硬件系统。三、计算机软件系统。四、多媒体技术基础。一、计算机概述1.计算机的特点高速自动进行信息处理的电子设备,它能按照人们预先编写的程序对输入的数据进行处理、存储、传送,从而输出有用的信息或知识,2.计算机的发展阶段计算机发展的5个阶段:(1)大型主机阶段: 主要电子管时代(2)小型计算机..._计算机与网络版面费

C++11:使用using定义别名_c++ using 别名-程序员宅基地

文章浏览阅读592次。本文介绍 C++11 中使用 using 定义别名的用法。_c++ using 别名

推荐文章

热门文章

相关标签