RabbitMQ STOMP 连接

RabbitMQ STOMP connection

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

我 运行 遇到的问题是,虽然来自浏览器的调用似乎工作正常,因为通过 webstomp/stomp 连接建立了与 Rabbit 的非常短暂的连接,但在 2 或 3 之后秒连接被 Rabbit 断开。

rabbitmq 日志证实了这一点:

=INFO REPORT==== 11-Jul-2016::23:01:54 === accepting STOMP connection (192.168.1.10:49746 -> 192.168.1.100:55674)
=INFO REPORT==== 11-Jul-2016::23:02:02 === closing STOMP connection (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}
                   ]
    }
]

我已经看过 Rabbit 文档一百万次了,但这感觉很简单,我忽略了。

已解决。梳理日志后,我意识到 web_stomp 正在侦听端口 15674,因此我更改了配置文件以反映这一点。我发誓我曾在某个时候进行过更改,但似乎没有什么不同。

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

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