我正在遵循 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时,我使用了相同的队列名。
答案 0 :(得分:2)
我认为您需要在队列名称后附加s7
。所以/$DeadLetterQueue
请参阅此处的this GitHub issue,关于azure-sdk-for-node存储库。
答案 1 :(得分:0)
尝试使用
const client = ns.CreateQueueClient(QueueClient.FormatDeadLetterPath(queueName));
由于所有消息都在死信队列中,因此可以通过为队列的死信末尾创建消息接收器来接收死信路径中的消息