Основываясь на ваш вопрос и ваши комментарии, это то, что я могу посоветовать вам:
- При запуске приложение, подключиться к 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());
Сообщения всегда протекала в FIFO. У вас есть несколько подписки на вашу тему? Что вы подразумеваете под «Но это приложение не каждый раз подписывается на эту тему»? – Thomas
Похоже, что у вас есть случай, который не является точным отображением в ASB, и может потребоваться некоторый код. Точно так же, как @Thomas сказал, не могли бы вы подробнее рассказать о своем приложении? –
@Thomas У меня есть приложение для подписчиков, которое иногда находится в автономном режиме, когда он выходит в Интернет, нужно просто получить самое последнее сообщение, а не всю очередь FIFO –