2016-09-23 50 views
0

我有一個應用程序訂閱Azure Servicebus不斷接收來自Stream Analytics的消息的主題。但這個應用程序不是每次訂購此主題。當應用程序執行訂閱時,我如何才能從主題收到只有最後一條消息只接收有關主題的最後一條消息

+1

消息總是自顧自地FIFO。你有多個訂閱到你的主題?你是什​​麼意思「但這個應用程序不是每次訂閱此主題」? – Thomas

+0

這聽起來像你有一個案件,不完全映射到ASB和可能需要一些自定義代碼。就像@Thomas說的,你能否詳細說明你的應用程序? –

+0

@Thomas我有一個有時候離線的訂閱者應用程序,當它上線時只需要接收最新的消息,而不是整個隊列的FIFO –

回答

0

根據你的問題,你的意見,這是我可以建議你:

  • 應用程序啓動時,連接到Azure的ServiceBus認購,並得到所有的消息在隊列中。
  • 刪除所有以前的消息(只需完成它)並處理最後一條消息。
  • 然後您就可以開始收聽新的傳入消息。在此基礎上的答案(Clearing azure service bus queue in one go

// Get the message receiver 
var messagingFactory = MessagingFactory.CreateFromConnectionString("ServiceBusConnectionString"); 
var messageReceiver = messagingFactory.CreateMessageReceiver(SubscriptionClient.FormatSubscriptionPath("TopicName", "SubscriptionName")); 

BrokeredMessage lastMessage = null; 
while (messageReceiver.Peek() != null) 
{ 
    if(lastMessage != null) 
    { 
     // This was not the last message so complete it. 
     lastMessage.Complete(); 
    } 

    // Batch the receive operation 
    var brokeredMessages = messageReceiver.ReceiveBatch(300).ToList(); 

    //Get the last message and remove it from the list 
    lastMessage = brokeredMessages.Last(); 
    brokeredMessages.RemoveAt(brokeredMessages.Count -1); 

    // Complete all the other messages 
    var completeTasks = brokeredMessages.Select(m => Task.Run(() => m.Complete())).ToArray(); 

    // Wait for the tasks to complete. 
    Task.WaitAll(completeTasks);     
} 

if (lastMessage != null) 
{ 
    // Process your message 
} 

// Start listening to new incoming message 
messageReceiver.OnMessage(message => 
{ 
    // Process new messages 
}, new OnMessageOptions()); 
相關問題