webSocket结合rabbitMQ实现消息推送

Rabbitmqwebsocket实现消息通信的整理

  • 问题描述

在用springboot 集成websocket过程中,利用rabbimq实现消息代理的时候,会出现一些坑,纪录下遇到的问题,以备份防坑。按以下4个步骤,基本上可以跨坑。

  • 步骤描述
  1. 步骤一

Rabbitmq要实现消息代理,需要开启stomp通道

         ①进入到rabbitmq安装目录下的sbin:

②执行命令:rabbitmq-plugins list 查看stomp协议相关的插件是否启动

下图是启动,红框处是:e*或者E*,如果没有启动,执行如下命令

rabbitmq-plugins enable rabbitmq_web_stomp

rabbitmq-plugins enable rabbitmq_web_stomp_examples

 

 

 

  1. 步骤二:

Java代码:

Springboot集成了websocket的消息代理,参数如下:

stompPort:61613

host   rabbitmq的地址

username/password 用户名和密码

virtualHost 虚拟主机名

username和password最好别用guest(涉及到远程登录问题,需要改配置)

@Configuration

@EnableWebSocketMessageBroker

  public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

  

   @Value("${spring.proxy.rabbitmq.host}")

   private String host;

   @Value("${spring.proxy.rabbitmq.stomp.port}")

   private Integer stompPort;

   @Value("${spring.proxy.rabbitmq.username}")

   private String username;

   @Value("${spring.proxy.rabbitmq.password}")

   private String password;

   @Value("${spring.proxy.rabbitmq.virtual-host}")

   private String virtualHost;

   @Bean

   public ServerEndpointExporter serverEndpointExporter() {

      return new ServerEndpointExporter();

   }

  

   @Override

   public void registerStompEndpoints(StompEndpointRegistry registry) {

      registry.addEndpoint("/building-websocket")

            .setAllowedOrigins("*")

            .withSockJS();

  

   }

  

   /**

    * enableSimpleBroker 服务端推送给客户端的路径前缀

    */

   @Override

   public void configureMessageBroker(MessageBrokerRegistry registry) {

      //registry.enableSimpleBroker("/topic");

      registry.enableStompBrokerRelay("/topic", "/queue")

            .setRelayHost(host)

            .setRelayPort(stompPort)

            .setClientLogin(username)

            .setSystemLogin(username)

            .setSystemPasscode(password)

            .setClientPasscode(password)

            .setVirtualHost(virtualHost);

      registry.setApplicationDestinationPrefixes("/app");

   }
  1. 步骤三:

假如连接rabbitmq的用户密码是:admin/123456

则要绑定上对应的虚拟主机,自己设定,我这里设定的是:”/”(也可以是自己添加的其他的)

使用admin登录进去,点击admin ->admin

选择虚拟主机,设置权限

 

  1. 步骤四:

注意事项1:启动项目之前,需要找到rabbitmq的配置文件,目录:

Xxx/xxx/rabbitmq/etc/rabbitmq/

大坑:通常一般只有一个文件(离线安装),而没有rabbitmq的配置文件。如图:

这时候启动项目,连接正常,也不会报错,但是websocket的连接会提示用户权限被拒绝。

需要手动添加一个配置文件到该目录下

文件名:rabbitmq.config

文件内容:[{rabbit, [{tcp_listeners, [5672]},{loopback_users, []}]}].

 

注意事项2:队列名不能使用斜杠“/”,rabbitmq不识别

(使用simplebroker简单消息代理没问题)

例如: /topic/fire/alarm 不符合要求

正常:/topic/fire.alarm 或者/topic/firealarm

 

关于Rabbitmq和websocket的集成,其他基本的代码和配置可以参考如下链接:

https://blog.csdn.net/pacosonswjtu/article/details/51914567

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值