负载均衡——Ribbon

文章目录

Ribbon,Nexflix发布的负载均衡器,有助于控制HTTP和TCP客户端的行为。基于某种负载均衡算法(轮询、随机登),自动地帮助服务消费者去请求。

当Ribbon和Eureka配合使用时,Ribbot可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。

对Ribbon理解

Ribbon和Eureka配合使用

项目引入Ribbon

java 复制代码
<dependency>
	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

如果已经引入spring-cloud-starter-eureka,无需再次引人,里面已经包含该依赖

RestTemplate添加@LoadBalanced注解

只需添加@LoadBalanced就可为RestTemplate整合Ribbon,使其具备负载均衡能力

java 复制代码
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    // 用于访问第三方网络接口
    return new RestTemplate();
}

注意

当Ribbon和Eureka配合使用时,会自动将虚拟主机名(可将其简单理解成为提供者的服务名)映射成微服务的网络地址,代码中记得替换

microservice-provider-user 替换 localhost:8000

java 复制代码
@GetMapping("user/{id}")
public User findById(@PathVariable Long id){
    return restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);
}

自定义均衡方式

代码注册方式
java 复制代码
// 注意:该类不应该在主应用程序上下文的@ComponentScan 中,否则该类中的配置信息就被所有的@RibbonClient共享
// 注意:自定义算法不可以放在与注解 @ComponentScan 的同包或者子包下,否则不起作用
@Configuration
public class MySelfRule {
    @Bean
    public IRule ribbonRule(){
        System.out.println("hahahahah");
        // 负载均衡规则改为随机
        return new RandomRule();
    }
}

在主程序添加

java 复制代码
@RibbonClient(name = "microservice-provider-user", configuration = MySelfRule.class)
// @ComponentScan忽略指定包
// @ComponentScan(excludeFilters={@ComponentScan.Filter(type = FilterType.REGEX,pattern = "com.cloud.config.*")})
配置方式
java 复制代码
# 修改服务地址轮询策略,默认是轮询,可配置随机等
microservice-provider-user:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

Ribbon脱离Eureka使用

https://www.dandelioncloud.cn/article/details/1596843302127353857

报错:

Field loadBalancerClient in com.cloud.controller.MovieController required a bean of type 'org.springframework.cloud.client.loadbalancer.LoadBalancerClient' that could not be found.

相关推荐
MXsoft61836 分钟前
平台化是智能运维发展的必然趋势吗?
运维
liuccn1 小时前
Linux 存储系统:LVM 与直接分区
linux·运维
xexpertS3 小时前
CI/CD 熔断机制:如何通过编排级熔断器提升开发者效率
java·linux·运维
带娃的IT创业者3 小时前
突破内存瓶颈:利用 Nvidia GPU 显存作为 Linux Swap 空间的深度实践
linux·运维·服务器·nvidia·swap·gpu显存
FoldWinCard4 小时前
云原生 --- lvs
运维·服务器·lvs
MXsoft6184 小时前
成熟的自动化运维平台是什么样的?
运维·数据库·自动化
酷可达拉斯5 小时前
Linux操作系统-shell编程(1)
linux·运维·服务器
j7~5 小时前
【Linux】二十四.线程篇一《一文吃透Linux线程全面解析:概念、内存管理、优缺点与用途》
linux·运维·服务器·页表·线程概念·分页式存储管理·缺页异常
AOwhisky5 小时前
云原生 DevOps 工具链从入门到实战(第一期)——DevOps概述与GitLab部署——从理念到工具落地
运维·ci/cd·云原生·gitlab·开发·devops
AbandonForce6 小时前
Linux进程(WHAT HOW)
linux·运维·服务器