SpringCloud Nacos Gateway 负载均衡 Netty的Websocket

这篇具有很好参考价值的文章主要介绍了SpringCloud Nacos Gateway 负载均衡 Netty的Websocket。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Gateway的WS协议配置

二、问题引出

三、解决方法


一、Gateway的WS协议配置

- id: im-server_router
  uri: lb:ws://im-server
  predicates:
  - Path=/ws/**
  filters:
     - StripPrefix=1

ws: 代表通过websocket长连接协议,其他是gateway的常规配置。

二、问题引出

我已搭建了传统的Netty聊天室服务,即一个SpringBoot项目中同时存在web项目与Netty服务器,配置如下:服务器实际上会使用到两个端口,此时我们启动服务器并将其注册到Nacos当中!

server:
  port: 8081

# netty服务器的启动端口,必须和应用启动端口不一样
netty:
  port: 8888

#Spring
spring:
  application:
    name: im-server

问题来了:经过我的排查,发现gateway负载均衡的端口出里问题,我的netty服务端口是8888,而注册到Nacos当中的服务端口其实是web服务器的端口8081,所以gateway找不到对应的Netty服务器。

WebSocketHandshakeException: Invalid handshake response getStatus: 404

三、解决方法

读过Nacos底层源码的朋友应该知道,将服务注册到Nacos当中只需几行代码即可,如下在启动Netty服务时一并将Netty服务注册到Nacos当中即可!

    @Value("${netty.port}")
    private Integer port;

    @Value("${netty.application.name}")
    private String serverName;

    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;    


    public void start() throws Exception {
        //注册到Nacos里
        registerNamingService(serverName, String.valueOf(port));

        channel = serverBootstrap.bind(port).sync()
                .channel().closeFuture().sync().channel();
    }

    /**
     * 注册到 nacos 服务中
     *
     * @param nettyName netty服务名称
     * @param nettyPort netty服务端口
     */
    private void registerNamingService(String nettyName, String nettyPort) {
        try {
            NamingService namingService = NamingFactory.createNamingService(nacosDiscoveryProperties.getServerAddr());
            InetAddress address = InetAddress.getLocalHost();
            namingService.registerInstance(nettyName, address.getHostAddress(), Integer.parseInt(nettyPort));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

由于我使用了springBoot我将其配置修改如下:

server:
  port: 8081

# netty服务器的启动端口,必须和应用启动端口不一样
netty:
  port: 8888
  application:
    name: im-server

#Spring
spring:
  application:
    name: im-web-server

再次启动Netty服务器,可以看到Netty服务器已经注册到Nacos里了,gateway也可以对Netty集群进行负载均衡了:

SpringCloud Nacos Gateway 负载均衡 Netty的Websocket

 通过网关访问websocket也顺利实现了:

SpringCloud Nacos Gateway 负载均衡 Netty的Websocket

 后续将着手攻克Netty集群Channel共享的问题!文章来源地址https://www.toymoban.com/news/detail-510854.html

到了这里,关于SpringCloud Nacos Gateway 负载均衡 Netty的Websocket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包