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;
我正在做一个有趣的项目,它需要我学习消息队列和 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;