Azure Function 应用程序 - 无法从死信队列 (DLQ) 中检索

Azure Function apps - cannot retrieve from Dead Letter Queue (DLQ)

我正在按照 nodejs 示例 here 检索发送到死信队列的消息。我以这种方式将死信推送给 Q:

await brokeredMessage.deadLetter({
      deadletterReason: 'bad',
      deadLetterErrorDescription: 'too bad, so sad.',
    });

我确实看到 Azure 中的死信计数为 2。无论这些是由于我上面的死信代码还是其他一些事故导致消息成为死信而到达的,我在 DLQ 中有 2 个。但是 我无法通过以下方式检索它们

  const client = ns.createQueueClient(queueName);
  const receiver = client.getReceiver();
  const sender = client.getSender();
  const messages = await receiver.receiveBatch(100);

  if (messages.length > 0) {
    for (let i = 0; i < messages.length; i += 1) { ... }
  } else {
    // I ALWAYS GET HERE. 
  }

我做错了什么?没有错误。为什么我不能读取 DLQ 并检索其中的 2 个项目?队列名称是否会像毒邮件一样发生变化?我在发送、死信和尝试读取 DLQ 时使用相同的队列名称。

我认为您需要将 /$DeadLetterQueue 附加到您的队列名称。所以const deadLetterQueueName = queueName + "/$DeadLetterQueue";

在 azure-sdk-for-node 存储库中参见 this GitHub issue

尝试使用

const client = ns.CreateQueueClient(QueueClient.FormatDeadLetterPath(queueName));

由于您的所有消息都在您的死信队列中,您可以通过为队列的死信端创建消息接收器来接收来自死信路径的消息