【问题标题】:Why are the messages getting lost at random from the service bus? What is it that I am doing wrong?为什么消息会从服务总线中随机丢失?我做错了什么?
【发布时间】:2020-03-05 06:36:56
【问题描述】:

从 Azure 服务总线持续接收消息的正确方法是什么?我通过无限轮询队列来执行以下操作。

const receiver = queueClient.createReceiver(ReceiveMode.peekLock);
while (true) {
    const maxMessageCount = 1;
    try {
        if (!receiver.isReceivingMessages()) {
            const message = await receiver.receiveMessages(maxMessageCount);
            if (message.length > 0) {
                /**
                 * Note: we are always receiving one message per call
                 */
                processMessage(message[0]);
            }
        }
    } catch (err) {
        processError(err);
    }
}

但我遇到了一个非常奇怪的情况。一段时间后,一半的消息丢失了,上面的接收者只收到了一半。我想知道发生了什么。这段代码有什么错误吗?我通常启动 nodejs 脚本并使用 ctrl+c 停止它。即使我停止了 nodejs 脚本,是否有可能在后台运行某些守护程序侦听器并使用上述逻辑?

注意:我总是启动单个 nodejs 脚本。

【问题讨论】:

  • 我开始回答@sean,自从我们从 rest api 升级到本机节点库后,我面临着类似的奇怪情况......然后对 TTL 和 . .. 一些发件人在没有通知的情况下添加了它。

标签: node.js azure queue azure-servicebus-queues


【解决方案1】:

使用 Azure 服务总线,消息永远不会丢失。由于您的代码使用PeekLock 模式,消息很可能会被重试并最终进入死信队列。检查死信队列以查看它们是否存在。或者,验证生存时间 (TTL) 未设置为较短的值并导致消息被清除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2015-06-20
    相关资源
    最近更新 更多