【发布时间】:2019-01-18 03:44:33
【问题描述】:
我有以下发布者和订阅者:
// publisher.js
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var ex = 'logs';
var msg = process.argv.slice(2).join(' ') || 'Hello World!';
ch.assertExchange(ex, 'fanout', {durable: true});
ch.publish(ex, '', new Buffer(msg));
console.log(" [x] Sent %s", msg);
});
setTimeout(function() { conn.close(); process.exit(0) }, 500);
});
//subscriber.js
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var ex = 'logs';
ch.assertExchange(ex, 'fanout', {durable: true});
ch.assertQueue('', {exclusive: true}, function(err, q) {
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q.queue);
ch.bindQueue(q.queue, ex, '');
ch.consume(q.queue, function(msg) {
if(msg.content) {
console.log(" [x] %s", msg.content.toString());
}
}, {noAck: true});
});
});
});
如果我运行 publisher.js 发布两条消息,然后运行subscriber.js,我希望订阅者打印我过去发布的两条消息,但实际上订阅者没有收到任何消息。
如何让 RabbitMQ 持久化已发布的消息,允许任何订阅者从头开始消费或上次消费的任何地方?
【问题讨论】:
-
您的意思是在您的订阅者代码中发布吗?
-
抱歉,我意识到我粘贴了错误的订阅者代码。现在我刚刚更新了。
标签: rabbitmq publish-subscribe