当前位置: 首页 > 后端技术 > Java

Nginx将WebSocket转发到SpringCloudGateway并路由到SpringBoot服务

时间:2023-04-02 09:49:45 Java

1、在nginx位置配置proxy_set_header升级$http_upgrade;proxy_set_header连接“升级”;2.配置SpringCloudGateway配置文件spring:cloud:gateway:prefix:/open/v1routes:-id:platform-system#http请求uri:lb://platform-systempredicates:-Path=/platform/**-id:platform-system-websocket#ws请求uri:lb:ws://platform-systempredicates:-Path=/platform-socket/**3.服务配置@ConfigurationpublicclassWebSocketConfig{@BeanpublicServerEndpointExporterserverEndpointExporter(){returnnewServerEndpointExporter();}}@Slf4j@Component@ServerEndpoint(value="/socket/wx/qrLogin")publicclassWxQrLoginWebSocket{@OnOpenpublicvoidonOpen(Sessionsession){log.info("客户端连接成功:{}",session.getId());}/***链接关闭时调用的方法*/@OnClosepublicvoidonClose(Sessionsession){try{sockets.remove(session.getId());log.info([websocketmessage]断开连接,sessionId:"+session.getId());}catch(Exceptione){e.printStackTrace();日志。错误(e.getMessage());}}/***收到客户端消息后调用的方法**@parammessage*@paramsession*/@OnMessagepublicvoidonMessage(Stringmessage,Sessionsession){log.info("【websocketmessage】收到客户端消息:"+message);}/***发送错误时的处理**@paramsession*@paramerror*/@OnErrorpublicvoidonError(Sessionsession,Throwableerror){try{//打印错误log.error("Usererror,reason:"+error.getMessage());错误.printStackTrace();//关闭链接session.close();sockets.remove(session.getId());}catch(IOExceptione){thrownewRuntimeException(e);}}}四、访问连接(这里我的服务有ContextPath所以会加上platform-system)nginx端口443:wss://ip:port/open/v1/platform-socket/platform-system/socket/wx/qrLoginnginx端口80:ws://ip:port/open/v1/platform-socket/平台系统/套接字/wx/qrLogin