0

Stream Analytics から常にメッセージを受信して​​いるAzure Servicebusトピックでサブスクライブしているアプリケーションがあります。ただし、このアプリケーションは、このTopicで毎回サブスクライブされるわけではありません。アプリケーションがサブスクリプションを行うときに、トピックから最後のメッセージのみを受信するにはどうすればよいですか?

4

1 に答える 1

0

あなたの質問とコメントに基づいて、これはあなたにアドバイスできることです:

  • アプリケーションが起動したら、Azure ServiceBus サブスクリプションに接続し、キュー内のすべてのメッセージを取得します。
  • 以前のすべてのメッセージを削除して (完了するだけ)、最後のメッセージを処理します。
  • その後、新しい受信メッセージを聞き始めることができます。

この回答に基づいて(一度にAzureサービスバスキューをクリアする):

// 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 に答える