服务器之家

服务器之家 > 正文

SpringCloud Ribbon 负载均衡的实现

时间:2021-07-01 14:48     来源/作者:huanzi-qch

前言

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

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部