Node.js 为什么服务总线上的消息会随机丢失?我做错了什么?

Node.js 为什么服务总线上的消息会随机丢失?我做错了什么?,node.js,azure,queue,azure-servicebus-queues,Node.js,Azure,Queue,Azure Servicebus Queues,从Azure服务总线连续接收消息的正确方法是什么?我通过无限轮询队列来执行以下操作 const receiver = queueClient.createReceiver(ReceiveMode.peekLock); while (true) { const maxMessageCount = 1; try { if (!receiver.isReceivingMessages()) { const message = await rece

从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脚本,是否有可能在后台使用上述逻辑运行一些deamonlistner


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

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

我开始回答@sean,自从我们从rest api升级到本机节点库以来,我面临着类似的奇怪情况。。。然后对TTL执行了最后一次双重检查,并。。。一些发件人未经通知就添加了它。