我过去曾将 RabbitMq 用作 MessageQueue 并且在收到消息时触发事件非常简单。
我查看了 IBM 安装程序提供的 .NET 源代码,但我发现处理它的方法并不好。查看示例 SimpleSubscribe 它对池做了这样的事情
// getting messages continuously
for (int i = 1; i <= numberOfMsgs; i++)
{
// creating a message object
message = new MQMessage();
try
{
topic.Get(message);
Console.WriteLine("Message " + i + " got = " + message.ReadString(message.MessageLength));
message.ClearMessage();
}
catch (MQException mqe)
{
if (mqe.ReasonCode == 2033)
{
++time;
--i;
Console.WriteLine("No message available");
Thread.Sleep(1000);
//waiting for 10sec
if (time > 10)
{
Console.WriteLine("Timeout : No message available");
break;
}
continue;
}
else
{
Console.WriteLine("MQException caught: {0} - {1}", mqe.ReasonCode, mqe.Message);
}
}
}
其中数字numberOfMsgs是作为参数传递的整数。如果我通过 -1 它可能会无限池化,但我认为这不是一个好方法。这导致我以特定的时间间隔池化队列,然后可能会以 100% 的速度旋转一个线程,我不放有Thread.Sleep 没有人有更好的方法?
相关分类