Тайм-аут метода MSMQ Receive ()

Мой оригинальный вопрос некоторое время назадMSMQ Slow Queue ReadingТем не менее, я вышел из этого и теперь думаю, что знаю проблему чуть яснее.

Мой код (на самом деле часть библиотеки с открытым исходным кодом, которую я использую) выглядит следующим образом:

queue.Receive(TimeSpan.FromSeconds(10), MessageQueueTransactionType.Automatic);

Который используетMessaging.MessageQueue.Receive Функция и очередь является MessageQueue. Проблема заключается в следующем.

Вышеуказанная строка кода будет вызываться с указанным тайм-аутом (10 секунд).Receive(...) Функция является блокирующей функцией и должна блокироваться до тех пор, пока сообщение не поступит в очередь, и в это время оно вернется. Если сообщение не получено до истечения времени ожидания, оно будет возвращено по истечении времени ожидания. Если сообщение находится в очереди при вызове функции, оно немедленно вернет это сообщение.

Тем не менее, то, что происходит, этоReceive(...) вызывается функция, которая видит, что в очереди нет сообщений, и, следовательно, ожидает поступления нового сообщения. Когда приходит новое сообщение (до истечения времени ожидания), оно не 'обнаружил это новое сообщение и продолжает ждать. Время ожидания в конце концов истекло, после чего код продолжается и вызываетReceive(...) снова, где он берет сообщение и обрабатывает его.

Теперь эта проблема возникает только через несколько дней / недель. Я могу заставить его работать нормально снова, удалив & воссоздание очереди. Это происходит на разных компьютерах и в разных очередях. Таким образом, кажется, что что-то накапливается до того момента, когда оно нарушает способность запуска / уведомления, чтоReceive(...) Функция использует. Я '

Я проверил много разных вещей, и все кажется нормальным ISN»отличается от очереди, которая работает нормально. Существует много дискового пространства (13 ГБ свободного места) и оперативной памяти (около 350 МБ свободного от 1 ГБ из того, что я могу сказать). Я проверил записи реестра, которые выглядят так же, как и другие очереди, а монитор производительности нене показывать ничего необычного. Я также запустил инструмент TMQ и могуЯ не вижу в этом ничего явно неправильного.

Я использую Windows XP на всех машинах, и на всех них установлен пакет обновления 3. Я не отправляю большое количество сообщений в очереди, самое большее, это будет 1 раз в 2 секунды, но, как правило, намного реже, чем это. Сообщения тоже очень маленькие и нигде не превышают 4 МБ.

Единственное, что я только что заметил, это файлы p0000001.mq и r0000067.mq в C: \ WINDOWS \ system32 \ msmq \ storage, которые имеют размер 4,096 КБ, однако они имеют такой же размер на других компьютерах, которые в настоящее время не испытывают проблемы. Проблема не возникает с каждой очередью на компьютере одновременно, так как я могу воссоздать одну очередь проблем на компьютере, а другие очереди все еще испытывают проблему.

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

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

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

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

Ответы на вопрос(4)

Ваш ответ на вопрос