2
我的方案:我希望我的應用程序將日誌發佈到RabbitMQ,並讓另一個進程使用這些日誌並寫入數據庫。另外,即使目前沒有消費者,日誌也應該保留在RabbitMQ中。但是,通過我現在的代碼,我的日誌不會顯示在RabbitMQ中,除非我啓動了一個消費者。我究竟做錯了什麼?當沒有消費者時,獲取消息以堅持RabbitMQ
我的代碼:
var amqp = require('amqp');
var connection = amqp.createConnection({
host: "localhost",
port: 5672
});
connection.on('ready', function() {
// Immediately publish
setTimeout(function() {
connection.publish('logs',
new Buffer('hello world'), {},
function(err, res) {
console.log(err, '|', res);
});
}, 0);
// Wait a second to subscribe
setTimeout(function() {
connection.queue('logs', function(q) {
q.subscribe(function(message) {
console.log(message.data);
});
});
}, 1000);
});
經過測試和工作!有一點超出範圍,但是如果我用Queue聲明包裝我的發佈,這是否會導致另一次往返RabbitMQ,或者我的庫(amqp for nodejs)是否足夠聰明,可以在給定會話中緩存已創建的隊列? –
如果您使用的是固定隊列名稱,則只需創建一次即可。如果它完全是靜態的,你甚至可以手動在代碼外部創建它。如果你嘗試創建一個已經存在的隊列,它將會確認它的存在。 – robthewolf