Моим исходным вопросом от только что является MSMQ Медленное Чтение Очереди, однако я совершенствовался от этого и теперь думаю, что знаю более более ясную проблему.
Мой код (хорошо на самом деле часть библиотеки с открытым исходным кодом, которой я пользуюсь) похож на это:
queue.Receive(TimeSpan.FromSeconds(10), MessageQueueTransactionType.Automatic);
Который использует Обмен сообщениями. MessageQueue. Получите функцию, и очередью является MessageQueue. Проблема следующие.
Вышеупомянутую строку кода назовут с указанным тайм-аутом (10 секунд). Receive(...)
функция является блокирующейся функцией и, как предполагается, блокируется, пока сообщение не прибывает в очередь, в котором времени это возвратится. Если никакое сообщение не получено, прежде чем тайм-аут поражен, он возвратится в тайм-ауте. Если сообщение будет в очереди, когда функция будет вызвана, это сразу возвратит то сообщение.
Однако то, что происходит, Receive(...)
функция вызывается, видя, что нет никакого сообщения в очереди, и следовательно ожидающий нового сообщения для вхождения. Когда новое сообщение входит (перед тайм-аутом), это не обнаруживает это новое сообщение и продолжает ожидать. Тайм-аут в конечном счете поражен, в которой точке код продолжается и звонит Receive(...)
снова, где это забирает сообщение и обрабатывает его.
Теперь, эта проблема только происходит после многих дней/недели. Я могу заставить его работать обычно снова путем удаления и воссоздания очереди. Это происходит на различных компьютерах и различных очередях. Таким образом, кажется, что что-то растет до некоторой точки, когда это повреждает способность к инициированию/уведомлению что Receive(...)
функциональное использование.
Я проверил много разных вещей, и все кажется нормальным и не отличается от очереди, которая работает обычно. Существует много дискового пространства (свободных 13 ГБ) и RAM (приблизительно 350 МБ, свободных из 1 ГБ от того, что я могу сказать). Я проверил ключи реестра, которые все появляются то же как другие очереди, и монитор производительности ничего не показывает из нормального. Я также выполнил инструмент TMQ и ничего не вижу noticably неправильно от этого.
Я использую Windows XP на всех машинах, и у них всех есть пакет обновления 3 установленных. Я не отправляю большую сумму сообщений очередям, самое большее это было бы 1 каждые 2 секунды, но обычно намного менее частое, чем это. Сообщения являются только маленькими также и нигде около предела 4 МБ.
Единственной вещью, которую я только что заметил, является p0000001.mq, и r0000067.mq файлы в C:\WINDOWS\system32\msmq\storage - оба 4,096 КБ однако, они - то, что размер на других компьютерах также, которые в настоящее время не испытывают проблему. Проблемы не происходит с каждой очередью на компьютере сразу, поскольку я могу воссоздать 1 трудную очередь на компьютере, и другие очереди все еще испытывают проблему.
Я не очень опытен с MSMQ поэтому, если Вы отправляете возможные вещи проверить, может Вы объяснять, как проверить их или где я могу найти больше деталей о том, о чем Вы говорите.
В настоящее время ситуация:
Таким образом, у меня есть большое количество компьютеров/очередей, чтобы сравнить и протестировать против.