0

我在Azure Servicebus主题上订阅了一个应用程序,该应用程序不断接收来自流分析的消息。但是这个应用程序并不是每次都订阅这个Topic。当应用程序进行订阅时,我如何只收到来自主题的最后一条消息?

4

1 回答 1

0

根据您的问题和评论,我可以为您提供以下建议:

  • 当您的应用程序启动时,连接到 Azure ServiceBus 订阅并获取队列中的所有消息。
  • 删除所有以前的消息(只需完成它)并处理最后一条消息。
  • 然后您可以开始收听新的传入消息。

基于这个答案(一次性清除天蓝色服务总线队列):

// 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());
于 2016-09-27T09:53:59.807 回答