服务发现模块
1. 概述
1.1 模块名称
Discovery
1.2 设计
-
模块设计图

-
数据库设计

1.3 模块功能
Discovery 模块赋予了 ShenYu 网关一种主动感知和响应被代理服务列表变化的能力。 通过 Discovery 网关 admin 服务的主动监听,ShenYu 网关能够及时掌握被代理服务的变动情况。 这一功能的设计具有灵活性,可以根据需要在选择器级别或插件级别进行配置。 目前,已经引入了 Discovery 功能的插件包括 TCP 插件、Divide 插件、Websocket 插件和 gRPC 插件。
1.4 监听模式
LOCAL, ZOOKEEPER, NACOS, EUREKA, ETCD
- LOCAL 模式: 主要依靠手动维护 upstream 列表,并推送到网关;
- ZOOKEEPER 模式: 监听 ZooKeeper 中指定节点下临时节点的变化来获取数据;
- NACOS 模式:监听 Nacos 中指定服务名称下实例的变化来获取数据;
- EUREKA 模式: 监听 Eureka 中指定服务名称下实例的变化来获取数据;
- ETCD 模式:通过监听 etcd 中指定节点键值对的变化来获取数据。
1.5 作用范围
- 插件级别:影响整个插件,所有该插件下的选择器都将默认采用当前的监听模式;
- 选择器级别:适用于当前选择器,对于当前插件下的不同选择器,可以使用不同的监听模式。
2. 使用
2.1 插件级别配置
2.1.1 服务发现配置
- 在支持 Discovery 模块的插件中(当前只有 TCP 插件支持在admin控制台页面,进行插件级别 discovery 配置,其他插件可以通过 shenyu-client 进行插件级别 discovery 配置,见下文中的“配合Shenyu-client使用”), 点击
服务发现配置, 在弹出的表单中,选择需要的监听模式, 并填写服务发现名称、注册服务器URL、注册中心配置参数等:


2.1.2 在选择器中使用
-
点击
添加选择器,在新增选择器页面中,我们发现类型强制选择刚才配置的插件级监听模式,表示所添加的选择器也将采用相同的配置。 此时,仅需输入需要监听的监听节点:
-
这里的
转换处理是指,ShenYu 规定的 upstream 注册数据是以下 JSON 格式传输,包括:- url: upstream 的 url
- protocol: upstream 的通信协议
- status: upstream 节点的状态 (0: healthy, 1: unhealthy)
- weight: 权重,计算负载均衡时使用
{
"url": "127.0.0.1::6379",
"protocol": "tcp",
"status": 0,
"weight": 10
} -
如果您的服务别名与ShenYu定义的JSON格式不匹配,您可以在
转换处理中进行别名映射。 例如,如上图所示,如果您需要将"status"改为"healthy",而保留其他键不变, 进行如下操作:起一个新的别名,将"status"映射为"healthy", 同时保留原有JSON键的形式。 -
进行选择器剩余的属性的配置,详情见具体插件对应的文档。
2.2 选择器级别配置
- 在支持 Discovery 模块的插件中,点击
添加选择器,在服务发现标签页中, 配置类型、监听节点、服务器URL列表、注册中心参数等字段内容,配置内容仅对当前选择器有效,每次新增选择器需要重新配置。

- 对于Divide、gRPC、Websocket插件,添加选择器页面有
导入后台服务发现配置功能, 指的是,如果服务接入 ShenYu 网关时配置了 shenyu-discovery 相关的属性(见配合shenyu-client使用),可以选择导入并沿用后台的配置,如下图我们首先点击导入后台服务发现配置查看后台配置:

- 如果确认导入,点击后台配置弹出框中的