MQQueueManager 消息池

我过去曾将 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 没有人有更好的方法?


四季花海
浏览 226回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP