Текущей настройка включает в себя обслуживание окон, которые подхватывают сообщение из локальной очереди и извлекает информацию, и помещает в свой SQL database.According к моей конструкцииОбработка отравляют сообщения в MSMQ
- служба подбирает сообщение из очереди. (Я использую Peek() здесь).
- Отправляет его в базу данных.
- Если по какой-то причине я получаю исключение, сохраняя его в базе данных, сообщение возвращается в очередь, что для меня является надежным.
- Я регистрирую ошибки, чтобы пользователь мог узнать, в чем проблема, и исправить ее.
Пример исключения: Если соединение DBconnection теряется при сохранении сообщений в базе данных, тогда сообщения не теряются, поскольку они находятся в очереди. Я не комментирую, пока не получаю подтверждение от БД, что сообщение вставлено. Таким образом, пользователь может видеть журналы и убедиться, что DBconnection существует, и все будет нормально, и мы не потеряем никаких сообщений в очереди.
Но, глядя в другой сценарий: сообщения, которые я получаю в очереди, относятся к третьей стороне по стандартной схеме. Схема осталась бы такой же, и в ней нет изменений. Но я видел некоторые, где я получаю некоторые исключения в формате и после того, как он не был отправлен, сообщение возвращается в очередь. В этот момент это сообщение будет для меня шеей бутылки, так как те же сообщения снова собираются и пытаются обработать сообщение. Каждый раз, когда служба забирает одно и то же сообщение и получает одно и то же исключение. Таким образом, это бесконечно бесконечно, если это сообщение не удалено или не поместит это сообщение в очередь.
Глядя на удаление сообщения: На данный момент, если я иду на основе исключения формата ... тогда я могу ошибаться, так как я могу столкнуться с некоторыми другими исключениями в будущем.
Есть ли способ, чтобы я мог вернуть эти сообщения в очередь, указанную последним в списке, вместо начала очереди.
Нужен совет относительно того, как действовать дальше.
Примечание: Очередь транзакционная.
Если ошибки требуют ручного вмешательства, не могли бы вы переместить их во вторую очередь ошибок? – Bill
Мне нужно пойти с @Bill, вот как это делается. Перемещайте сообщения, которые разбиваются в очередь, чтобы они могли управляться. Мы обрабатываем сотни тысяч сообщений MQ в день, и это единственный управляемый подход. Это приводит к тому, что очередь PROD работает и обрабатывает то, что она может. Затем мы используем Patrol для оповещения о том, когда эти очереди получают сообщения. –
@ bill Есть ли функция MSMQ, которая помещает эти сообщения в очередь резервного копирования или резервного копирования .... или это должно быть сделано в коде. – Macnique