文章目录
前言
- 目前项目由于导入导出业务处理时间过长;很容易连接超时,用户等待过长,体验感不佳
- 相关业务使用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 最后排查到原因分析:
- 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=2
7. 请求成功
总结:
- 后续将着手攻克netty集群channel共享的问题!
- 有什么问题的话,留言讨论(看到就回),或者可以通过公众号后台留言交流
- chatgpt相关了解可以通过关注公众号回复【chatgpt】即可获得 【科学上网12一年,目前使用正常,多用一天算一天】
发表评论