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

前言

  • 目前项目由于导入导出业务处理时间过长;很容易连接超时,用户等待过长,体验感不佳
  • 相关业务使用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 最后排查到原因分析:

  1. gateway连接不上websocket服务,转发失败
  2. 我通过netty搭建websocket服务,所以项目中有两个端口,一个服务端口,一个netty端口
  3. 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=2            

7. 请求成功

在这里插入图片描述

总结:

  • 后续将着手攻克Netty集群Channel共享的问题!
    在这里插入图片描述
    在这里插入图片描述
  • 有什么问题的话,留言讨论(看到就回),或者可以通过公众号后台留言交流
  • chatgpt相关了解可以通过关注公众号回复【chatgpt】即可获得 【科学上网12一年,目前使用正常,多用一天算一天】

在这里插入图片描述

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
SpringCloud+Nacos+Gateway是一种将Spring CloudNacosGateway进行整合的项目。它可以为微服务架构提供简单有效的统一的API路由管理方式。\[2\]在实战中,首先需要准备三个Spring Boot应用:spring-cloud-user-center(独立用户服务)、spring-cloud-order-center(独立订单服务)和spring-cloud-gateway(独立的网关服务)\[3\]。其中,用户服务可以通过引入相关依赖和配置yml文件来创建,然后编写测试类来实现具体的功能\[1\]。如果你有具体的问题或者需要更详细的实战指导,请提供更多的信息。 #### 引用[.reference_title] - *1* *3* [SpringCloud+Nacos+Gateway](https://blog.csdn.net/qq_44936392/article/details/129023413)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringCloud微服务实战:nacos+gateway网关统一拦截、转发、授权详细教程(附git源码)](https://blog.csdn.net/qq_42411805/article/details/124872461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值