我使用Node.js编写的服务通过MQTT(https://www.npmjs.com/package/mqtt)接收消息,然后写入数据库(使用mssql的SQL Server)。
当一切正常运行时,这将非常好用,我创建mqtt监听器并订阅新的消息事件。
但是,如果与DB的连接失败(这可能由于网络中断等而定期发生),则将消息写入数据库将失败,并且消息将被丢弃。
我想告诉MQTT经纪人 - "我无法处理消息,将其保留在缓冲区中直到我可以。"
var mqtt = require('mqtt')
var client = mqtt.connect('mymqttbroker')
client.on('connect', function () {
client.subscribe('messagequeue')
})
client.on('message', function (topic, message) {
writeMessageToDB(message).then((result) => {console.log('success'};).catch((err) => {/* What can I do here ?*/});
})
答案 0 :(得分:2)
也许在重发功能上设置超时?可能应该改进,在删除消息之前只尝试n次,但它绝对是一种方式来做到这一点。显然,这没有经过测试,但它应该会给你一些想法...
var resend = function(message){
writeMessageToDB(message).then((result) => {
console.log('Resend success!')
})
.catch((err) => {
setTimeout(function(message){
resend(message);
}, 60000);
});
}
client.on('message', function (topic, message) {
writeMessageToDB(message).then((result) => {
console.log('success')
})
.catch((err) => {
resend(message);
});
});