我是天蓝色服务总线的初学者。消息发送到队列的时间。当消息过期时,我想接收它并调用一些方法来完成。我怎么能这样做?
答案 0 :(得分:1)
您可以尝试选项 - 在过期的消息上启用死字法。
QueueDescription.EnableDeadLetteringOnMessageExpiration财产
获取或设置一个值,该值指示当邮件过期时此队列是否具有死信支持。
这将向队列的DLQ发送消息。但这意味着如果您因其他原因(例如递送计数超过最大值)而发出留言信息,您也会在DLQ中看到该消息。幸运的是,有一个原因属性/标题(DeadLetterReason
)。对于因TTL到期而移动到DLQ的消息,value will be TTLExpiredException
。
答案 1 :(得分:0)
当消息过期时,我想接收它并调用一些方法来完成。我怎么能这样做?。
据我所知,为了获取死信消息,您可以像正常队列一样构建队列接收器。如果您有一个名为“myqueue”的队列,则DLQ路径看起来像myqueue/$DeadLetterQueue
。
以下是用C#编写的用于从DLQ接收消息的示例代码:
var deadletterReceiver = await receiverFactory.CreateMessageReceiverAsync(
QueueClient.FormatDeadLetterPath(queueName), ReceiveMode.PeekLock);
while (true)
{
var msg = await deadletterReceiver.ReceiveAsync(TimeSpan.Zero);
if (msg != null)
{
foreach (var prop in msg.Properties)
{
Console.WriteLine("{0}={1}", prop.Key, prop.Value);
}
await msg.CompleteAsync();
}
else
{
break;
}
}
有关详细信息,请参阅DeadletterQueue。此外,您可以按照get-started-with-queues的官方教程选择开发语言。