SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】
文章目录
- 前言
- websocket项目创建
- gateWay的ws协议配置
- 说说遇到的问题过程和解决思路
- 1. 启动getaway服务和socket服务接口调用并没有成功;
- 2. 排查1002原因,询问chatgpt
- 3. 百度、cv 最后排查到原因分析:
- 4. 手动将netty服务注册到nacos上:
- 5. nacos服务列表出现对应的配置信息
- 6. 调整gateway网关配置
- 7. 请求成功
- 总结:
前言
- 目前项目由于导入导出业务处理时间过长;很容易连接超时,用户等待过长,体验感不佳
- 相关业务使用http短连接请求,无法满足某些特定的业务场景,如消息通知弹窗、扫码登录
- 故需要引入websocket
- 因为原有项目网关是使用【springCloud-nacos-gateWay】,所以先项目websocket项目需要使用网关进行统一转发(便于管理)
websocket项目创建
有时间出个demo项目(下次一定) gitee代码仅供参考
gateWay的ws协议配置
spring: cloud: gateway: routes: - id: dh-web-socket-service uri: lb:ws://dh-web-socket-service:30229 predicates: - Path=/CYHLW/ws/** filters: - StripPrefix=2- lb:是负载均衡
- ws:代表通过websocket长连接协议,其他是gateway的常规配置
说说遇到的问题过程和解决思路
1. 启动getaway服务和socket服务接口调用并没有成功;
1. ws升级成功 2. 但是连接服务失败了
2. 排查1002原因,询问chatgpt
3. 百度、cv 最后排查到原因分析:
- gateway连接不上websocket服务,转发失败
- 我通过netty搭建websocket服务,所以项目中有两个端口,一个服务端口,一个netty端口
- nacos注册只注册上服务端口,netty端口没有注册上。需要手动注册
4. 手动将netty服务注册到nacos上:
package com.dh.websocket.core.configuration; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.nacos.api.naming.NamingFactory; import com.alibaba.nacos.api.naming.NamingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; import java.net.InetAddress; import java.util.Properties; /** * web socket寄存器nacos配置 * * @author yolo * @date 2024/3/18 14:58 */ @Configuration public class WebSocketRegisterNacosConfiguration { @Value("${netty.socket.application-name}") private String applicationName; @Value("${netty.socket.port}") private int port; @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; @PostConstruct public void start() { // 注册到Nacos里 registerNamingService(applicationName, port); } /** * 注册到 nacos 服务中 * * @param nettyName netty服务名称 * @param nettyPort netty服务端口 */ private void registerNamingService(String nettyName, int nettyPort) { try { NamingService namingService = NamingFactory.createNamingService(nacosDiscoveryProperties.getNacosProperties()); InetAddress address = InetAddress.getLocalHost(); namingService.registerInstance(nettyName, address.getHostAddress(), nettyPort); } catch (Exception e) { throw new RuntimeException(e); } } }5. nacos服务列表出现对应的配置信息
6. 调整gateway网关配置
spring: cloud: gateway: routes: - id: dh-web-socket-service uri: lb://dh-web-socket-service predicates: - Path=/dh/wsocket-service/** filters: - StripPrefix=2 - id: dh-web-socket uri: lb:ws://dh-web-socket predicates: - Path=/dh/wsocket/** filters: - StripPrefix=27. 请求成功
总结:
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!









