如果接收器没有运行,Node.js RabbitMQ消息会丢失

这是我的问题

1.如果接收器先启动然后发送消息,则消息被传送

2但是,如果接收器没有启动,那么代码表示发送的消息,但启动接收器不会得到消息。

如果我使用pika在Python中尝试相同的顺序,那么事情似乎正常工作。

我还validation没有使用rabbitmqctl –list_queues命令的消息

我正在运行node.js 0.70并在Ubuntu 11.04 64位版本上运行

我在我的send.js中有以下代码

var util= require('util') var amqp = require('amqp'); var connection = amqp.createConnection({host:'localhost', login:'guest', password:'guest'}); var pubMessage = function pubM(msg) { var x = connection.exchange(); var q = connection.queue('helloNode', { autoDelete: true, durable: false, exclusive: false } ); x.publish('helloNode',{helloNode: "This is a message"}); }; connection.addListener('ready', pubMessage); console.log(" Sent a message "); 

和我的接收器中的以下代码

  var util= require('util') var amqp = require('amqp'); var connection = amqp.createConnection({host:'localhost', login:'guest', password:'guest'}); connection.on('ready', function () { var q = connection.queue('helloNode', { autoDelete: true, durable: false, exclusive: false } ); q.bind('#'); q.subscribe(function (message) { util.p(message); }); }); 

您的队列绑定正在使用autoDelete:true进行设置。 使用此设置,如果接收器未连接(或断开连接),则不存在将消息路由到的队列。 设置autoDelete:false即使接收者离线,仍会保持队列不变,并将继续生成消息。

消息被路由到“helloNode”队列,然后,当你的发送者终止时,这个队列被删除。 即使是“exclusive:false”也是如此,因为订阅者在发件人中创build了这个队列。 考虑到这一点,行为“如果没有订阅已经在队列上活跃,它不会被自动删除”在这里不适用。

也许pika创造不同价值的交stream/排队?