1. 概述
1.1 插件名称
- TCP插件
1.2 适用场景
- 处理 TCP 协议请求,将其转发到后端其他 TCP 协议的服务
- 服务负载均衡
1.3 插件功能
- 支持根据配置的 upstream list 做 TCP 代理;
- upstream list 可在 admin 模块自行配置,热同步到 gateway;
- 支持设置请求的负载均衡策略,目前支持 shenyu 负载均衡模块的策略;
- 支持配置开启端口进行监听,可配置 reactor-netty 参数;
- 支持开启多个代理选择器
注意: 负载均衡作用与gateway建立连接时,当连接建立,后续的流量继续保持负载均衡模块已经选定的upstream
1.4 插件代码
- 核心模块:
shenyu-plugin-tcp
shenyu-protocol-tcp
1.5 添加自哪个shenyu版本
- 2.6.0
2. 如何使用插件
2.1 启用插件
- 初次使用时,启动 admin server,在
shenyu-admin
—> 基础配置 —> 插件管理 中, 搜索 tcp 插件 并且点击“资源”激活 TCP 插件模块
- 在
shenyu-admin
—> 基础配置 —> 插件管理 —>tcp
,设置为开启
2.2 配置插件
- TCP 插件是以代理选择器(proxy-selector)为单位创建的,因此配置插件即是配置代理选择器的属性。 创建代理选择器时,点击页面的“添加选择器按钮”,在弹出的选择器表单中,即可对选择器属性进行配置:
默认配置如下:
{
"loadBalance": "random",
"bossGroupThreadCount": "1",
"workerGroupThreadCount": "12",
"clientMaxConnections": "20",
"clientMaxIdleTimeMs": "30000",
"clientMaxLifeTimeMs": "60000",
"clientPendingAcquireTimeout": "5",
"clientPendingAcquireMaxCount": "5"
}
loadBalanceAlgorithm
: shenyu负载均衡算法,默认为randombossGroupThreadCount
,workerGroupThreadCount
: ReactorNetty TcpServer 配置,详情见shenyu-protocol-tcp#TcpBootstrapServer#start
clientMaxConnections
,clientMaxIdleTimeMs
,clientMaxLifeTimeMs
,clientPendingAcquireTimeout
,clientPendingAcquireMaxCount
: ReactorNettyConnectionProvider
配置,详情见shenyu-protocol-tcp#ConnectionContext
用户可以在shenyu-admin
—> 基础配置 —> 插件处理管理 中,搜索 tcp 插件,对默认配置进行修改编辑:
2.3 配置服务发现
TCP 插件支持插件级别、选择器级别两种级别的服务发现配置:
服务发现 详情 见 discovery-mode
① 用户点击页面上的“服务发现配置”按钮,便可以在弹出的表单中配置插件级别的服务发现。配置完成后,再次打开表单,可以修改或删除之前的配置。 插件级别discovery配置后,选择器的discovery设置默认与插件级别保持一致:
② 如果用户没有配置插件级别的服务发现,在每次创建代理选择器(proxy-selector)时,都可以对该选择器的discovery进行配置:
目前,TCP 插件支持 Zookeeper 模式和 Local 模式的服务发现。
2.3.1 Zookeeper 模式
当服务发现的类型选择zookeeper时,需要填写 Discovery-Zookeeper 配置 培训详情见 discovery-mode
zookeeper模式下,discovery模块会自动监听用户的 zookeeper 注册中心,自动维护 discovery_upstream
2.3.2 Local 模式
- 当服务发现的类型选择local时,需要手动填写服务下游列表。如图所示,服务下游列表为可编辑表格, 双击每一个单元格可以进行表格内容的修改:
2.4 配置选择器
- 除了上文中的服务发现配置外,创建选择器时,还需要填写选择器的“基本配置”部分,包括名称与代理端口等。为了提升填写的便捷性, 可以点击“复制选择器”,拷贝已经创建的选择器的部分信息。
注意:选择器的名称唯一标识选择器,不能重复
- 创建完选择器后,选择器以卡片的形式展现,鼠标悬停于卡片上,将会展示选择器的创建时间、更新时间与属性。 卡片下方有三个图标按钮,从左至右依次为同步、编辑与删除选择器:
- 如果当前 admin 的 UpstreamList 与 gateway 出现差异时,可以点击“同步”图标,强制同步到gateway。
2.5 日志
- shenyu-gateway 端口启动log
- shenyu-gateway 代理列表同步log
2.6 示例
以代理 redis 为例,使用 redis-cli -p {forwardPort}
访问