gpt4 book ai didi

SpringCloud Ribbon 负载均衡的实现

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章SpringCloud Ribbon 负载均衡的实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

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负载均衡已经可以实现,更多配置请看官方文档 。

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

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

最后此篇关于SpringCloud Ribbon 负载均衡的实现的文章就讲到这里了,如果你想了解更多关于SpringCloud Ribbon 负载均衡的实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com