RabbitMQ STOMP连接

时间:2016-07-12 04:43:21

标签: rabbitmq stomp sockjs web-stomp

我正在开发一个有趣的项目,需要我学习消息队列和websockets。我试图通过websockets将浏览器连接到使用sockjs而不是纯websockets的rabbitmq实例。在兔子上我已经激活了stomp和web_stomp的插件(使用sockjs时需要web_stomp)。

我遇到的问题是,虽然来自浏览器的调用似乎正常工作,因为通过webstomp / stomp连接与Rabbit进行了非常简短的连接,但是在2或3秒后,Rabbit将连接丢弃。

这是由rabbitmq日志确认的:

    = INFO REPORT ==== 2016年7月11日:: 23:01:54 ===     接受STOMP连接(192.168.1.10:49746 - > 192.168.1.100:55674)
    = INFO REPORT ==== 2016年7月11日:: 23:02:02 ===     关闭STOMP连接(192.168.1.10:49746 - > 192.168.1.100:55674)

这是通过webstomp插件连接到RabbitMQ的浏览器代码:

var url = "http://192.168.1.100:55674/stomp";
var ws = new SockJS(url);
var client = Stomp.over(ws);
var header = {
  login: 'test',
  passcode: 'test'
};
client.connect(header,
  function(){
    console.log('Hooray! Connected');
  },
  function(error){
    console.log('Error connecting to WS via stomp:' + JSON.stringify(error));
  }
);

这是Rabbit配置:

[
    {rabbitmq_stomp, [{default_user, [{login, "test"},
                                    {passcode, "test"}
                                   ]
                    },
                    {tcp_listeners, [{"192.168.1.100", 55674}]},
                    {heartbeat, 0}
                   ]
    }
]

我已经在兔子文档上花了一百万次但这感觉就像我忽略的一样简单。

1 个答案:

答案 0 :(得分:0)

解决。梳理完日志后,我意识到web_stomp正在侦听端口15674,所以我更改了配置文件以反映这一点。我发誓我曾经在某些方面做出了这一改变,但似乎并没有什么不同。

在发出我的请求之前我做的最后一项更改是关闭心跳。我读过的所有内容都表明sockjs不支持心跳,并且有建议将其关闭而不是使用默认值。除了在配置文件中关闭心跳之外,我还将其添加到浏览器代码中:

client.heartbeat.outgoing=0;
client.heartbeat.incoming=0;