MSMQ Получают () тайм-аут метода

Моим исходным вопросом от только что является 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 поэтому, если Вы отправляете возможные вещи проверить, может Вы объяснять, как проверить их или где я могу найти больше деталей о том, о чем Вы говорите.

В настоящее время ситуация:

  • ComputerA - 4 нормальные очереди
  • ComputerB - 2 очереди, испытывающие проблему, 1 нормальная очередь
  • ComputerC - 2 очереди, испытывающие проблему
  • ComputerD - 1 нормальная очередь
  • ComputerE - 2 нормальные очереди

Таким образом, у меня есть большое количество компьютеров/очередей, чтобы сравнить и протестировать против.

12
задан Community 23 May 2017 в 12:07
поделиться