サービス バス キューを使用して、Web ロールとワーカー ロールの間で通信しています。サービス バスに 2 つのキューがあります。Web ロールからメッセージをキューに入れています。ワーカー ロールはそのメッセージを処理し、Web ロールが取得してクライアントに送信する別のキューに別のメッセージを戻します。Web ロール スレッドと worker ロール スレッドの両方が継続的に実行されている
実行制御が QueueClient.Receive にあるときを知りたいのですが、メッセージを受信するまで待機しますか、それともキューにメッセージがない場合は次の行に移動しますか? キューにメッセージがない状況では、次に何が起こるかを確認するために QueueClient.Receive にブレークポイントを設定しましたが、コントロールは次の行に移動せず、ただ消えるだけなので、待っているだけかもしれないと思ったからです。
しかし、以下の私の Web ロールでは、サービス バス キューを介してワーカー ロールにメッセージを送信しており、すぐにワーカー ロールからの応答を期待していますが、ワーカー ロールの処理に少し時間がかかり、Web ロールがそれを取得できず、Web が応答しないことがあります。ロール スレッドはスリープ状態になります。
私は Windows azure の初心者なので、この問題全体について少し混乱しています。誰でも私を助けてもらえますか?
私のワーカーの役割:
// Receive the message from Web Role
BrokeredMessage receivedBroadcastMessage = null;
receivedBroadcastMessage = WebRoleClient.Receive();
if (receivedBroadcastMessage != null)
{
// Process the message
receivedBroadcastMessage.Complete();
}
BrokeredMessage webRoleMessage = new BrokeredMessage(processedMessage);
WorkerRoleClient.Send(webRoleMessage);
私の Web ロール:
// send the request to worker role
BrokeredMessage webRoleMessage = new BrokeredMessage(details);
WebRoleClient.Send(webRoleMessage);
// receive the queue from worker role
BrokeredMessage workerRoleMessage = null;
workerRoleMessage = WorkerRoleClient.Receive();
if (workerRoleMessage != null)
{
//process message
workerRoleMessage.Complete();
}
else
{
// sleep thread
}