「这是我参与 11 月更文挑战的第 18 天,活动详情查看:2021最后一次更文挑战」。
你好,我是悟空呀。
Ribbon 的心跳检测原理和 Eureka 还不一样,Ribbon 不是通过每个服务向 Ribbon 发送心跳或者 Ribbon 给每个服务发送心跳来检测服务是否存活的。
先来一张图看下 Ribbon 的心跳检测机制:
Ribbon 心跳检测原理:对自己本地缓存的 Server List 进行遍历,看下每个服务的状态是不是 UP 的。具体的代码就是 isAlive 方法。
核心代码:
isAlive = status.equals(InstanceStatus.UP);
复制代码
那么多久检测一次呢?
默认每隔 30s 执行以下 PingTask 调度任务,对每个服务执行 isAlive 方法,判断下状态。
Ribbon 常用配置项
禁用 Eureka
# 禁用 Eureka
ribbon.eureka.enabled=false
复制代码
服务注册列表默认是从 Eureka 获取到的,如果不想使用 Eureka,可以禁用掉。然后我们需要手动配置服务列表。
配置服务列表
ribbon-config-passjava.ribbon.listOfServers=localhost:8081,localhost:8083
复制代码
这个配置是针对具体服务的,前缀就是服务名称,配置完之后就可以和之前一样使用服务名称来调用接口了。
其他配置项
Spring Cloud 微服务中 负载均衡组件 Ribbon 架构原理,分为几大块,都在前面的文章进行了讲解。分为几大块:
- Ribbon 的六大核心组件
- Ribbon 如何拦截请求并进行转发的。
- Ribbon 初始化的原理。
- Ribbon 如何同步 Eureka 注册表的原理。
- Eureka 和 Ribbon 两种 心跳检测的原理
- Ribbon 的常用配置项。
作者简介:悟空,8年一线互联网开发和架构经验,用故事讲解分布式、架构设计、Java 核心技术。《JVM性能优化实战》专栏作者,开源了《Spring Cloud 实战 PassJava》项目,公众号:悟空聊架构
。本文已收录至 www.passjava.cn