Windows服务总线 - 多个接收器
问题描述:
我玩的是我安装在本地机器上的Windows服务总线(不是Azure)。我按照这里的例子,但换了我的本地实例:http://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-queues/Windows服务总线 - 多个接收器
我有两个控制台应用程序设置现在,一个是接收器,另一个是发件人。接收器只是监听新的消息和不输出的console.writeline:
// Continuously process messages sent to the "TestQueue"
while (true)
{
BrokeredMessage message = Client.Receive();
if (message != null)
{
try
{
Console.WriteLine("Body: " + message.GetBody<string>());
Console.WriteLine("MessageID: " + message.MessageId);
Console.WriteLine("Test Property: " +
message.Properties["TestProperty"]);
Console.WriteLine("----------------------");
// Remove message from queue
message.Complete();
}
catch (Exception)
{
// Indicate a problem, unlock message in queue
message.Abandon();
}
}
}
接下来,我有我的发件人:
while (true)
{
// Create message, passing a string message for the body
BrokeredMessage message = new BrokeredMessage("Test message " + i);
// Set some addtional custom app-specific properties
message.Properties["TestProperty"] = "TestValue";
message.Properties["Message number"] = i;
// Send message to the queue
Client.Send(message);
i++;
System.Threading.Thread.Sleep(50);
}
其实,这一切的伟大工程。我可以启动1个接收器,发件人和我可以看到消息。然后我启动第二个接收器,消息自动在两个接收器之间来回传递。
但是,当我旋转第三个接收器时,第一个接收器退出获取消息(直到另一个接收器退出)。
有没有办法让所有三个(或“n”)接收器处理队列中的消息?我想可能会有队列设置中的设置,但我似乎无法找到。
答
如果减少发送方的睡眠时间,第一个接收方是否开始检索消息?可能是您的队列正在被读取,以至于第二个和第三个接收器碰巧检索消息,但第一个接收器由于队列为空而无法检索消息。
您的目标是让独立读者处理队列,或者您是否经过一对多通信,每个接收者都有机会处理消息?如果是这样,那么你应该看看使用Topics and Subscriptions。
我放慢了读者的步伐,他们都在收到消息。所以现在我知道这不是一个设置问题,但是一个空队列或其他实例读取的速度太快。谢谢! – 2013-03-06 06:58:15