我正在使用服務總線隊列在Web角色和工作者角色之間進行通信。我的服務巴士上有兩個隊列。我將一條消息從web角色放入隊列,並且worker角色處理該消息,並將另一條消息放回到另一個隊列中,該角色將由Web角色檢索併發送到客戶端。 Web角色和工作者角色線程都在不斷運行服務總線QueueClient.Receive如何工作?
我想知道何時執行控件位於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
}
實際上,默認的QueueClient.Receive()正在等待幾秒鐘來收到消息。我的意思是已經有一個默認的超時設置。無論如何,我發現了異步接收消息的整個過程。請參閱此問題http://stackoverflow.com/questions/14852670/asynchronous-method-for-queueclient-receive/14853195#comment20821941_14853195 – Bitsian 2013-02-19 05:03:42