MSMQ: Сообщения иногда не отправляются или получаются без ошибок
-
20-12-2019 - |
Вопрос
У меня есть следующие настройки и проблема с MSMQ. Основываясь на предыдущем опыте с MSMQ, утверждаю, что это что-то простое, что мне не хватает, но я просто не знаю, что это такое.
Настройка
У меня есть 3 сбалансированных нагрузки веб-серверов (позволяет называть их серверами
Проблема
По большей части - при угадке 95% времени - все работает нормально, но иногда сервер
Детали
Вот все детали, которые я могу подумать, что может помочь объяснить мою настройку и то, что я понял до сих пор:
- .
- Частная очередь на сервере
P не транзакционная. - Частная очередь имеет настройки разрешений для каждого для отправки, так и приема сообщений.
-
Это код, который я использую (C #), чтобы отправить сообщение на удаленную личную очередь:
var queue = new MessageQueue(@"FormatName:DIRECT=OS:ServerP\PRIVATE$\MyMessageQueue"); var defaultProperties = queue.DefaultPropertiesToSend; defaultProperties.AcknowledgeType = AcknowledgeTypes.FullReachQueue | AcknowledgeTypes.FullReceive; defaultProperties.Recoverable = true; defaultProperties.UseDeadLetterQueue = true; defaultProperties.UseJournalQueue = true; queue.Send(requestData);
-
Отправка сообщения, используя код выше, не отображается исключение - если это сделал мой обработчик ошибок в веб-приложении, поймал бы и записал его, поэтому я предполагаю, что он отправляется.
- Есть исходящие очереди на
w1 , w2 и w3 все, указывая на частную очередь на p - Все это пусто. - на w1 , w2 и w3 Я не могу видеть никаких «мертвых» сообщений.
- на p Частный очередь пуста, поэтому сообщения обрабатываются (что я могу проверить из моей базы данных).
- на p нет «мертвых» сообщений. Есть журнальные сообщения, но они, кажется, не соответствуют никакой недавней дате / раз.
- Все серверы работают Windows Server 2012.
Большая часть временных сообщений отправляется, получена и обработана просто хорошо, но, без какого-либо шаблона, не видимого мне, иногда они нет. Кто-нибудь может увидеть, что идет не так? Или объясните мне, как я могу попытаться выяснить, что происходит?
Решение
Вы уверены, что приемник на P не сбивается / не проигрывает сообщение как-то?Потому что ваша очередь не является транзакционной, если какая-то обработка не удается, это одно потерянное сообщение.
Во всяком случае, есть много возможных причин, почему это может потерпеть неудачу. Какое у вас журнал (отладка / информационные уровни)?
Я думаю, что следующее поможет отслеживать проблему:
- Когда событие генерируется в веб-приложении.
- прямо перед отправкой события из веб-приложения через msmq.
- в ресивере, когда вы получите сообщение из очереди.
Таким образом, вы могли бы, по крайней мере, соответствовать отправленным сообщениям к полученным сообщениям и обработанию сообщений.
Как побочная записка, когда вы проверяете сообщения о мертвых буквеных сообщениях, вы делаете это на исходном компьютере и на любых промежуточных хмелях, а не на месте назначения.Если у вас нет хмелов, то они будут переданы в неоплаченную очередь мертвой буквы на веб-серверах.