MSMQ - быстрый производитель / медленный потребитель - PullRequest
3 голосов
/ 04 февраля 2010

У меня проблема с обменом сообщениями (с MSMQ), который представляет собой вариант быстрого производителя / медленного потребителя.Есть ли способ получить ожидающее количество неиспользованных сообщений в частной очереди MSMQ?Я хотел бы использовать это для регулирования производителя.

Я хотел бы использовать парадигму семафора с MSMQ, где приложение производителя будет отправлять сообщения только в том случае, если число ожидающих сообщений меньше указанного числа.

По сути, я хотел бы сделать что-то вроде следующего

///Producer pseudo-code 
    public void SendMessage(Message message, int totalMessagesSentCounter)
    {
       if (totalMessagesSentCounter % 1000 == 0)
       {
         while (outgoingQueue.GetMessageCount() > X)  ///Is this possible?
         {
             Sleep(Y milliseconds);
         }
        }
       outgoingQueue.Send(Message);
       totalMessagesSentCounter++;
    }

Моя конфигурация: Win XP / 2003 с MSMQ 3.0

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

Я не использовал сам MSMQ, но у меня есть рецепт, который я нашел полезным.

Вместо одной очереди у вас есть две очереди - по одной в каждом направлении.

«Производитель» потребляет элемент из очереди, поступающей от потребителя, и отправляет новое сообщение потребителю. Каждый раз, когда потребитель потребляет, он помещает новое сообщение в очередь для производителя.

Таким образом, «токен» предоставляет обратную связь от потребителя к производителю, которая ограничивает производителя до скорости потребителя.

Ловкость, если это уместно, заключается в том, что сообщения просто возвращаются, а не новые распределения каждый раз. Если его однопроцессный процесс и данные сообщения имеют большой и фиксированный размер, это само по себе может стать мощным драйвером для принятия этого проекта.

1 голос
/ 04 февраля 2010

Мне пришлось использовать библиотеку COM для MSMQ. Я нашел следующую ссылку, которая помогла.

http://blog.codebeside.org/archive/2008/08/27/counting-the-number-of-messages-in-a-message-queue-in.aspx

...