我有一个节点工作器正在等待RabbitMQ消息。今天我对它进行了一些更改,现在当我连接dev实例时,一切正常 - 它似乎连接 - 但消耗函数不会触发。消息虽然已被消耗,但仍然消失。
Rabbit.queue('consume', function (q) {
q.bind('consume');
// This fires
console.log('Listening to queue...');
q.subscribe(function (message) {
// This doesn't fire but message gets removed from queue
console.log(message);
init(message);
});
});
答案 0 :(得分:0)
我在C#控制台应用程序中使用RabbitMQ客户端有同样的行为:
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
//Various RabbitMQ client magic that doesn't work
}
}
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
注意最后两行。它们使控制台保持打开和运行状态。否则该应用程序将立即关闭。问题是我将这两行代码放在using语句之外。一旦您通过using语句的结束括号,"使用"对象被处置。所以我打开它后几乎立即关闭了我的连接和通道。解决方案是将控制台线放在使用括号内:
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
//Various RabbitMQ client magic that astounds and amazes
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
}
一旦你看到它就明显而微不足道,但我浪费了一个小时。我不知道这是否类似于你在NodeJS中做的任何事情,但也许它会帮助其他一些沮丧的程序员。