WebSocket代理

Apache ShenYu 网关通过Divide插件实现了对websocket代理的支持。

环境准备

请参考运维部署的内容,选择一种方式启动shenyu-admin。比如,通过 本地部署 启动Apache ShenYu后台管理系统。

启动成功后,需要在基础配置->插件管理中,把divide 插件设置为开启。 Divide插件的相关使用,请参考:Divide插件

WebSocket代理 - 图1

在网关的 pom.xml 文件中引入divide插件的相关依赖:

  1. <!--if you use http proxy start this-->
  2. <dependency>
  3. <groupId>org.apache.shenyu</groupId>
  4. <artifactId>shenyu-spring-boot-starter-plugin-divide</artifactId>
  5. <version>${project.version}</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.shenyu</groupId>
  9. <artifactId>shenyu-spring-boot-starter-plugin-httpclient</artifactId>
  10. <version>${project.version}</version>
  11. </dependency>

请求路径

使用 Apache ShenYu 代理websocket的时候,假设其请求路径为:

  1. ws://localhost:9195/?module=ws&method=/websocket&rpcType=websocket

参数详解:

  • localhost:9195: 是网关启动的ip和端口。

  • module(必填):用于选择器的筛选条件。

  • method (参数): websocket路径,同时也用做规则匹配。

  • rpcType :websocket 必填,且必须为websocket 。

选择器和规则设置

divide插件中新增一个选择器配置:

WebSocket代理 - 图2

在条件中选择query类型,填写匹配字段和取值,这里分别是modulews 。这里的字段和取值,完全可以自定义,只要能够匹配上请求就行。 在处理操作中,填写websocket服务的地址。

在这一条选择器下新增一条规则:

WebSocket代理 - 图3

在条件中选择query类型,填写匹配字段和取值,这里分别是method/websocket 。这里的字段和取值,也可以自定义,只要能够匹配上请求就行。

通过以上的选择器和规则配置,你的请求就会被匹配上,然后再请求代理的的真实websocket地址:127.0.0.1:8080/websocket,这样 Apache ShenYu 网关就完成了websocket的代理。