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