2017-04-19 66 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並選擇你的開發語言。