2017-04-19 63 views
-1

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

+0

http://pmichaels.net/2017/07/02/azure-service-bus-send-e-mail-message-timeout/ –

回答

1

有一个选项可以尝试 - 在过期的邮件上启用死信。

QueueDescription.EnableDeadLetteringOnMessageExpiration物业

获取或设置一个值,该值指示此队列是否有一纸空文支持的消息到期时间。

这将向队列的DLQ发送消息。但是,这意味着如果您因为其他原因(例如交货次数超过最大值)而死信,您还会在DLQ中看到该消息。幸运的是,有一个原因属性/标题(DeadLetterReason)。对于由于TTL到期而移动到DLQ的邮件,value will be TTLExpiredException

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并选择你的开发语言。