首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保AMQP消息不丢失的情况下,错误的情况下,用户与rhea?

如何确保AMQP消息不丢失的情况下,错误的情况下,用户与rhea?
EN

Stack Overflow用户
提问于 2020-04-03 14:58:28
回答 1查看 25关注 0票数 0

因此,我使用JS中的rhea设计了一个基本的发布者-订阅者模型,该模型接受将数据保存到DB中的API请求,然后将其发布到队列中。

从那里,订阅者(下面添加的代码)拾取它,并尝试将其保存在数据库中。现在我的问题是,这个DB实例在开发期间经历了许多更改,并且可能会在插入操作期间导致错误。

因此,现在当订阅者尝试推送到此数据库时,会导致错误,因为数据已出列。我完全是JS的新手,所以有没有一种方法可以确保消息不会出队,除非我们确保它被正确保存,而不必在出错时再次发布它?

我的订阅者的代码:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2020-04-13 18:52:42

您可以使用如下代码显式接受消息或将其释放回发送者:

代码语言:javascript
复制
try {
    save_in_db(event.message);
    event.delivery.accept();
} catch {
    event.delivery.release();
}

有关更多信息,请参阅delivery docs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61006589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档