2017-10-16 5 views
0

このような重いタスクを達成しながら、より良いユーザーエクスペリエンスを提供するためにアプリケーションの処理をオフロードしたい場合、Azure Service Bus Queues 。Azureの機能を持つAzureサービスバスキューメッセージの処理

私はキューにデータをプッシュする方法とメッセージキューの背後にある基本的な考え方を理解していますが、私が理解するのが苦労しているのは、彼らが入ったときにそれらを処理する方法です。実装するには、メッセージが来るたびにリッスンするAzure関数を使用します。ただし、一定のポーリングなしでそれを行うにはどうすればよいですか? OnMessageを使用してキューに登録することはできますが、Azure関数はどのように機能しますか?例えば

現在私たちは、このような何かをやって

var client = QueueClient.CreateFromConnectionString(connectionString, queueName); 

BrokeredMessage message = new BrokeredMessage(); 

while ((message = client.Receive(new TimeSpan(hours: 0, minutes: 0, seconds: 30))) != null) 
{ 
    Console.WriteLine(string.Format("Message received: {0}, {1}, {2}", message.SequenceNumber, message.Label, message.MessageId)); 
    message.Complete(); 

    Console.WriteLine("Processing message (sleeping...)"); 
    Thread.Sleep(1000); 
} 

Console.WriteLine("Finished listening Press ENTER to exit program"); 
Console.ReadLine(); 

しかし、このケースでは、我々はちょうどポーリング権利をシミュレートしていますか?されていますかこれはちょうどよい解決のように感じません。私は私のデザインでこの間違いを考えていますか?

答えて

2

Azure ServiceBusは、クライアントがキューをポーリングするのではなく、接続されたクライアントに新しいメッセージをプッシュすることによって機能します。

ServiceBus APIを使用すると、OnMessageメソッドを使用してメッセージポンプを設定できますが、Azure関数を使用している場合は、すべてサービスバストリガーを使用して行います。

リスニングするキューをポイントするようにAzure関数を設定するだけです。新しいメッセージがキューに追加されると、関数がトリガされ、メッセージがそのメッセージに渡されます。

は、Service Busのトリガの例を見てみましょう:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#trigger-sample

+2

小さな修正 - ブローカーはクライアントにメッセージをプッシュしていませんが。 Azure Service Busクライアントには、メッセージをポーリングする別のスレッドで動作するメッセージポンプがあります。 –

+0

ありがとう私はこれが私が探していたような気がしましたが、このアプローチを使用するための正確な方法論を見つけることができませんでした。 – tokyo0709

関連する問題