Ribbon负载均衡
  0TLr4Q2NGHsK 2023年11月12日 21 0


文章目录

Ribbon简介

ribbon是一种客户端负载均衡工具

负载均衡是什么?

  • 简单来说就是将用户的请求平摊的分配到多个服务商,从而达到系统的HA(高可用),nginx,LVS都是常见的负载均衡的工具

Ribbon客户端负载均衡和nginx服务端负载均衡的区别?

  • nginx服务端负载均衡是客户端将请求提交到nginx,由nginx实现负载均衡(集中式负载均衡)
  • ribbon客户端负载均衡是客户端本地负载均衡,在调用微服务接口的时候,会在注册中心上获取注册信息服务列表,然后在本地实现远程RPC的服务调用(进程内的负载均衡)
  • 举例子就是去医院看病,nginx是别人安排你到某科的指定医生那里,ribbon是你自己去找到某科的医生

ribbon使用

新版本的eureka-client默认引入了

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.1.RELEASE</version>
<scope>compile</scope>
</dependency>

即eureka客户端默认继承ribbon

在这里是基于订单和支付服务来的,支付服务是集群部署,2台集群

3台eureka服务端集群

Ribbon负载均衡_spring

payment1 yaml文件

server:
port: 8101

spring:
application:
name: payment8101

eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7777.com:7777/eureka/, http://eureka7778.com:7778/eureka/, http://eureka7779.com:7779/eureka/

payment2 yaml文件

server:
port: 8103

spring:
application:
name: payment8101

eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7777.com:7777/eureka/, http://eureka7778.com:7778/eureka/, http://eureka7779.com:7779/eureka/

也可以看到同一个服务名下两台集群

Ribbon负载均衡_spring_02

订单服务controller

@RestController
@Slf4j
@RequestMapping("/get")
public class OrderController {

public static final String URL = "PAYMENT8101";

@Autowired
public RestTemplate restTemplate;

@RequestMapping("/get")
public String create(){
return restTemplate.getForObject("http://" + URL + "/res/res",String.class);
}
}

restTemplate使用:

@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}

@LoadBalanced:默认是轮询

从结果也可以看出:

Ribbon负载均衡_负载均衡_03


Ribbon负载均衡_客户端_04

负载均衡策略配置

负载均衡算法:

Ribbon负载均衡_客户端_05

更改负载均衡策略:

自定义规则类必须跟主类同级,不能被主类的@ComponentScan扫到

Ribbon负载均衡_客户端_06

规则类

@Configuration
public class MyRule {

@Bean
public IRule iRule(){
return new RandomRule();//随机选择
}
}

主启动类通过注解@RibbonClient声明选用的规则类

@SpringBootApplication
@EnableEurekaClient //声明自己是eureka客户端
@RibbonClient(configuration = MyRule.class)//声明选用的规则类
public class Order8102 {

public static void main(String[] args) {
SpringApplication.run(Order8102.class,args);
}

@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
0TLr4Q2NGHsK
作者其他文章 更多
最新推荐 更多