当前位置: 代码网 > it编程>编程语言>Java > SpringCloud Nacos Gateway 网关集成 Netty的Websocket不成功问题记录,以及解决思路记录 【以及websocket代码例子】

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

2024年08月02日 Java 我要评论
目前项目由于导入导出业务处理时间过长;很容易连接超时,用户等待过长,体验感不佳相关业务使用http短连接请求,无法满足某些特定的业务场景,如消息通知弹窗、扫码登录故需要引入websocket因为原有项目网关是使用【springCloud-nacos-gateWay】,所以先项目websocket项目需要使用网关进行统一转发(便于管理)gateway连接不上websocket服务,转发失败我通过netty搭建websocket服务,所以项目中有两个端口,一个服务端口,一个netty端口。

前言

  • 目前项目由于导入导出业务处理时间过长;很容易连接超时,用户等待过长,体验感不佳
  • 相关业务使用http短连接请求,无法满足某些特定的业务场景,如消息通知弹窗、扫码登录
  • 故需要引入websocket
  • 因为原有项目网关是使用【springcloud-nacos-gateway】,所以先项目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. 但是连接服务失败了

在这里插入图片描述

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一年,目前使用正常,多用一天算一天】

在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com