0
我有一個應用程序訂閱Azure Servicebus不斷接收來自Stream Analytics的消息的主題。但這個應用程序不是每次訂購此主題。當應用程序執行訂閱時,我如何才能從主題收到只有最後一條消息?只接收有關主題的最後一條消息
我有一個應用程序訂閱Azure Servicebus不斷接收來自Stream Analytics的消息的主題。但這個應用程序不是每次訂購此主題。當應用程序執行訂閱時,我如何才能從主題收到只有最後一條消息?只接收有關主題的最後一條消息
根據你的問題,你的意見,這是我可以建議你:
:
// 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());
消息總是自顧自地FIFO。你有多個訂閱到你的主題?你是什麼意思「但這個應用程序不是每次訂閱此主題」? – Thomas
這聽起來像你有一個案件,不完全映射到ASB和可能需要一些自定義代碼。就像@Thomas說的,你能否詳細說明你的應用程序? –
@Thomas我有一個有時候離線的訂閱者應用程序,當它上線時只需要接收最新的消息,而不是整個隊列的FIFO –