SpringCloud Ribbon 负载均衡的实现

2025-05-29 0 18

前言

ribbon是一个客户端负载均衡器,它提供了对http和tcp客户端的行为的大量控制。我们在上篇(猛戳:springcloud系列——feign 服务调用)已经实现了多个服务之间的feign调用,服务消费者调用服务提供者,本文记录feign调用ribbon负载均衡的服务提供者

github地址:https://github.com/netflix/ribbon

官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.0.rc2/single/spring-cloud-netflix.html

服务提供者

服务提供者有两个,实际上可以看做只有一个,因为这两个只有端口不同

maven引入ribbon

?

1

2

3

4

5
<!-- ribbon -->

<dependency>

<groupid>org.springframework.cloud</groupid>

<artifactid>spring-cloud-starter-netflix-ribbon</artifactid>

</dependency>

创建ribbonconfig文件,主类添加@ribbonclient(name = "ribbonconfig", configuration = ribbonconfig.class),我这里偷懒,直接在主类中创建内部类

?

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

28

29

30

31

32

33

34

35
@enableeurekaclient

@ribbonclient(name = "ribbonconfig", configuration = ribbonconfig.class)

@springbootapplication

public class springbootspringdatajpaapplication{

public static void main(string[] args) {

springapplication.run(springbootspringdatajpaapplication.class, args);

}

}

@configuration

class ribbonconfig {

@bean

public irule ribbonrule(){

return new randomrule(); //分配策略:随机选择一个server

// return new bestavailablerule(); //分配策略:选择一个最小的并发请求的server,逐个考察server,如果server被tripped了,则忽略

// return new roundrobinrule(); //分配策略:轮询选择,轮询index,选择index对应位置的server

// return new weightedresponsetimerule(); //分配策略:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低

// return new zoneavoidancerule(); //分配策略:复合判断server所在区域的性能和server的可用性选择server

// return new retryrule(); //分配策略:对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择server不成功,则一直尝试使用subrule的方式选择一个可用的server

}

@bean

public iping ribbonping() {

return new pingurl();

}

@bean

public serverlistsubsetfilter serverlistfilter() {

serverlistsubsetfilter filter = new serverlistsubsetfilter();

return filter;

}

}

下表显示了spring cloud netflix默认为ribbon提供的bean:

SpringCloud Ribbon 负载均衡的实现

官网例子:

SpringCloud Ribbon 负载均衡的实现

我们添加一个测试接口

?

1

2

3

4

5

6

7

8

9

10
@restcontroller

@requestmapping("/user")

public class usercontroller {

@requestmapping("/ribbon")

public string ribbon() {

return "springdatejpa -- 我的端口是:10088";

}

}

第二个服务提供者也是这样配置,注意:应用名要相同(spring.application.name=springdatejpa);端口不同;

服务消费者

服务消费者使用feign调用,无需做任何修改,feign已经使用ribbon。具体配置请戳:springcloud系列——feign 服务调用

?

1

2

3

4

5

6
@feignclient(name = "springdatejpa", path = "/user/")

public interface myspringbootfeign {

@requestmapping("/ribbon")

string ribbon();

}

?

1

2

3

4

5

6

7
/**

* feign调用

*/

@getmapping("feign/ribbon")

string ribbon(){

return myspringbootfeign.ribbon();

}

效果

启动所有项目,我们注册了三个服务,其中:

有两个服务名称相同、处理的业务相同、端口不同,这两台作为服务提供者(可看做是一个“小集群”);

另一个是服务消费者(feign调用);

SpringCloud Ribbon 负载均衡的实现

消费者不断调用,ribbon会从注册中心的服务列表拉取实例集合进行负载均衡调用背后的服务提供者

SpringCloud Ribbon 负载均衡的实现

后记

ribbon负载均衡已经可以实现,更多配置请看官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://www.cnblogs.com/huanzi-qch/p/10136254.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 SpringCloud Ribbon 负载均衡的实现 https://www.kuaiidc.com/109748.html

相关文章

发表评论
暂无评论