消息到期后的Service Bus

时间:2017-04-19 16:47:43

标签: azureservicebus

我是天蓝色服务总线的初学者。消息发送到队列的时间。当消息过期时,我想接收它并调用一些方法来完成。我怎么能这样做?

2 个答案:

答案 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的官方教程选择开发语言。