SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

07-09 1409阅读

文章目录

  • 前言
  • 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代码仅供参考

        SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

        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. 但是连接服务失败了
          

          SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

          2. 排查1002原因,询问chatgpt

          SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

          3. 百度、cv 最后排查到原因分析:

          1. gateway连接不上websocket服务,转发失败
          2. 我通过netty搭建websocket服务,所以项目中有两个端口,一个服务端口,一个netty端口
          3. nacos注册只注册上服务端口,netty端口没有注册上。需要手动注册

          SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

          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服务列表出现对应的配置信息

          SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

          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=2            
          

          7. 请求成功

          SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

          总结:

          • 后续将着手攻克Netty集群Channel共享的问题!

            SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

            SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

          • 有什么问题的话,留言讨论(看到就回),或者可以通过公众号后台留言交流
          • chatgpt相关了解可以通过关注公众号回复【chatgpt】即可获得 【科学上网12一年,目前使用正常,多用一天算一天】

            SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]