因此,我使用JS中的rhea设计了一个基本的发布者-订阅者模型,该模型接受将数据保存到DB中的API请求,然后将其发布到队列中。
从那里,订阅者(下面添加的代码)拾取它,并尝试将其保存在数据库中。现在我的问题是,这个DB实例在开发期间经历了许多更改,并且可能会在插入操作期间导致错误。
因此,现在当订阅者尝试推送到此数据库时,会导致错误,因为数据已出列。我完全是JS的新手,所以有没有一种方法可以确保消息不会出队,除非我们确保它被正确保存,而不必在出错时再次发布它?
我的订阅者的代码:
const Receiver = require("rhea");
const config = {
PORT: 5672,
host: "localhost"
};
let receiveClient;
function connectReceiver() {
const receiverConnection = Receiver.connect(config);
const receiver = receiverConnection.open_receiver("send_message");
receiver.on("connection_open", function () {
console.log("Subscriber connected through AMQP");
});
receiver.on("error", function (err) {
console.log("Error with Subscriber:", err);
});
receiver.on("message", function (element) {
if (element.message.body === 'detach') {
element.receiver.detach();
}
else if (element.message.body === 'close') {
element.receiver.close();
}
else {
//save in DB
}
}
receiveClient = receiver;
return receiveClient;
}发布于 2020-04-13 18:52:42
您可以使用如下代码显式接受消息或将其释放回发送者:
try {
save_in_db(event.message);
event.delivery.accept();
} catch {
event.delivery.release();
}有关更多信息,请参阅delivery docs。
https://stackoverflow.com/questions/61006589
复制相似问题