我正在使用服务总线队列在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