配置springcloud 网关gateway 转发websocket请求
网关是整个项目的统一入口
这是直接访问消息服务的请求路径 端口号是20007
WebSocketService.init("ws://127.0.0.1:20007/ws/" + 用户id)
显然这样是不符合微服务的方案,所有请求必须经过网关处理,转发到各个服务之中
所以我们需要在网关中的yml或者nacos中添加以下配置
spring: cloud: gateway: discovery: locator: enabled: true # 启用服务发现 lower-case-service-id: true routes: - id: 消息模块-websocket uri: lb:ws://cloud-message # uri: lb:ws://127.0.0.1:20007 predicates: - Path=/ws/**
-
id:
id
是一个字符串,用于唯一标识一个路由。它是可选的,但建议为每个路由提供一个有意义的ID,以便于管理和诊断。 -
uri:
uri
属性指定了下游服务的URL。它可以是一个绝对URL,也可以是一个相对于网关的相对URL。在微服务架构中,通常会使用服务注册和发现机制(如Eureka)来动态获取服务实例的地址。 -
predicates:
predicates
是一个条件列表,用于匹配传入的HTTP请求。每个条件都是一个谓词(Predicate),可以基于请求的各种属性进行匹配,例如请求方法(GET、POST等)、路径模式、查询参数、头信息等。如果请求满足所有谓词条件,那么它就会被路由到该路由配置的下游服务。 -
filters:
filters
是一个过滤器列表,用于在请求被转发到下游服务之前或响应返回给客户端之前对请求和响应进行处理。过滤器可以是内置的(如StripPrefix、Retry等),也可以是自定义的。过滤器可以修改请求和响应的内容、添加或删除头信息、执行安全检查等。
前端修改为 端口号改为网关20000
WebSocketService.init("ws://127.0.0.1:20000/ws/" + 用户id)
打开浏览器开发者工具效果 101 成功
效果图