0
我正在使用amqplib將消息發佈到我的RabbitMQ服務器。這工作得很好,但我認爲我可以優化我的工作方式。NodeJS:在實時事件中發佈AMQP消息
這個想法是聽一個串行端口從它獲取數據(這是連續發送),並將這些數據發佈到AMQP通道。然後,用戶可以得到的數據有兩個需求:
- 顯示實時值(與socket.io)上的web前端
- 商店的樣本(每分鐘)的MySQL數據庫(與另一個節點或PHP代碼)
這裏是我的代碼:
function on_connect(err, conn) {
if (err !== null) return bail(err);
function on_channel_open(err, ch) {
if (err !== null) return bail(err, conn);
ch.assertQueue(amqp_channel, {durable: false}, function(err, ok) {
if (err !== null) return bail(err, conn);
var trameEvents = teleinfo('/dev/ttyAMA0');
trameEvents.on('tramedecodee', function (data) {
ch.sendToQueue(amqp_channel, new Buffer(data));
console.log("Sent '%s'", data);
});
//log errors
trameEvents.on('error', function (err) {
console.log(util.inspect(err));
});
ch.close(function() { conn.close(); });
});
}
conn.createChannel(on_channel_open);
}
的問題是trameEvents回報有時一個錯誤,然後整個應用模具:
/home/pi/nodejs/teleinfo-amqp-publisher/node_modules/amqplib/lib/channel.js:149
throw new IllegalOperationError(msg, stack);
^
IllegalOperationError: Channel closed
at Channel.<anonymous> (/home/pi/nodejs/teleinfo-amqp-publisher/node_modules/amqplib/lib/channel.js:149:11)
所以我正在尋找一種方法來使健壯的節點應用程序執行這些任務。任何想法?
由於