1

我在这里关注nodejs示例来检索发送到死信队列的消息。我以这种方式将死信推到 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 时使用相同的队列名称。

4

2 回答 2

2

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

在 azure-sdk-for-node 存储库上查看此 GitHub 问题。

于 2019-02-22T21:48:49.703 回答
0

尝试使用

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

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

于 2019-02-25T02:42:19.320 回答