2017-03-14 1 views
0

Azure WorkerRoles with Service Busキューを使用してマイクロサービスを作成しようとしていますが、動作させることができますが、ここからどこに行くのかはわかりません。サービスバスキューを持つワーカーロールが処理を完了すると、どのように通知されますか?

現在、私はWorkerRoleに接続して、OCRに送信する画像のURIを含む仲介メッセージを送信することができます。画像にOCRを実行できますが、クライアントにどのように戻ってきますかそれは非同期であるため、OCRは完了し、抽出されたテキストは?ここで

はClient.OnMessage

Client.OnMessage((receivedMessage) => 
{ 
    try 
    { 
     MyServiceBusMessage messageBody = receivedMessage.GetBody<MyServiceBusMessage>(); 

     // Process the message 
     Trace.WriteLine("Processing Service Bus message: " + receivedMessage.SequenceNumber.ToString()); 
     Trace.WriteLine("Service Bus message ID: " + messageBody.ID); 
     Trace.WriteLine("Service Bus message Type: " + messageBody.Type); 
     Trace.WriteLine("Service Bus message Image Name: " + messageBody.ImageUri); 

     Uri imageURi = messageBody.ImageUri; 
     Guid imageGuid = messageBody.ID; 

     receivedMessage.Complete(); 

     string text = DoOCR(imageGuid, imageURi); 
    } 
    catch(Exception ex) 
    { 
     receivedMessage.DeadLetter("Exception Occured", ex.Message); 
     // Handle any message processing specific exceptions here 
    } 
}); 

の私の実装である。しかし、今、私はここから行くことがどこか分からないと私は誰もが任意のアイデアを持っていた場合、またはので、私は思っていたオンライン役に立つ何かを見つけることができませんどこに行くのかのヒント。

は現在、私はそうのようなキューにメッセージを送信するためにコンソールアプリケーションを使用しています:

QueueClient client = QueueClient.CreateFromConnectionString(constr, queueName); 
using (var bMessage = new BrokeredMessage(message)) 
{ 
    client.Send(bMessage); 
} 

は、私はそれはOCRが抽出されたテキストで完了しましたことを知らせるクライアントにメッセージを送ることができます?もしそうなら、私はそれをどのように達成するでしょうか?

+0

メッセージを送信しているクライアントはどのような種類のアプリケーションですか? –

+0

現在のところ、テスト用のコンソールアプリケーションです。私は使用しているコードで私の質問を編集します – hcham1

答えて

2

説明しているシナリオは、典型的なRequest/Replyパターンのように聞こえます。 コンソールアプリケーションが待機する別のキューを持つことができ、ステータスと元のイメージIDを含む完了時にメッセージを送信するワーカーロールがあります。

また、探しているものを簡単に達成するためのフレームワークを調べることもできます。 NServiceBusまたはMassTransitをご覧ください。どちらも異なる輸送手段をサポートしており、Azure Service Busがそれらの1つです。

サイドノート:OCRの作業の前にあなたのメッセージを完成させています。これを変更して、OCRコールが終了した後にメッセージを完了したい場合があります。現在、DoOCR()がスローした場合、メッセージは完了とマークされるため、決して再試行されません。

+0

合意。正しく終了したことがわかるまで、完了()しないでください。 Sidenote、 "再試行"についてはこのURLを参照してください。http://markheath.net/post/defer-processing-azure-service-bus-message – granadaCoder

+0

また、スキャッターギャザーを見てください。それはRabbitMQが私にそれを呼ぶものです。 http://geekswithblogs.net/asmith/archive/2012/04/16/149332.aspx – granadaCoder

+0

ありがとうございます。私は、クライアントが購読し、サービスからの応答を待つ応答キューを実装しました。 – hcham1

関連する問題