Какие реализации JMS-брокера позволяют пересылать сообщения, сохраненные в очереди мертвых сообщений? - PullRequest
2 голосов
/ 07 апреля 2010

Интересно, есть ли JMS-брокер, который позволяет администраторам повторно отправлять (через GUI или любой инструмент) сообщения, сохраненные в очереди сообщений ded или очереди недоставленных сообщений, после решения вызывающей проблемы (например, база данных не работает, недостаточно места ...).

WebSphere предоставляет возможность повторной отправки сообщений, сохраненных в очереди недоставленных сообщений: 1
Glassfish 2.1.1 с использованием Sun Java System Message Queue 4.4 не имеет возможности сделать это, я так думаю.

Какие варианты есть у других JMS-брокеров? Или это лучший способ, не использовать функцию DMQ / DLQ, если вы зависите от сообщения?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 17 апреля 2010

Я могу ответить за WebSphere MQ, но не за других провайдеров JMS.В случае WMQ есть несколько инструментов, включая Обработчик мертвых букв (DLH), который может автоматически повторять сообщения DLQ для временных ошибок, таких как QFULL.Например, очередь заполняется, а входящие сообщения переполняются в DLQ.DLH начнет повторять эти сообщения и по мере опустошения очереди автоматически заменяет их в исходной целевой очереди.Другие инструменты доступны как WMQ SupportPacs.

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

Еще одно предостережение: сообщения, попадающие на DLQ, обычно приводят к нарушению последовательности сообщений.Например, очередь заполняется, а сообщения отправляются в DLQ.Когда очередь истощается, сообщения воспроизводятся из DLQ, и в этот момент они пересекаются с новыми сообщениями по мере их поступления.В идеале приложение не чувствительно к проблемам последовательности сообщений, и каждое сообщение является атомарным.Это ключ к ответу на ваш последний вопрос.Используете ли вы DLQ, зависит намного больше (по крайней мере, в WMQ) от того, чувствительно ли приложение к последовательности сообщений.Если последовательность является проблемой, то у вас нет возможности позволить сообщениям перетекать во вторичную очередь и воспроизводить их, пока новые сообщения все еще поступают.Лучше в этом случае позволить заполнению очереди и сдвинуть назад или закрыть отправляющее приложение.

Подробнее о DLH можно прочитать здесь: http://bit.ly/aYJ13q

Пакеты поддержки WMQ здесь: http://bit.ly/bdSUfd (Проверьте MA01 и MO01)

0 голосов
/ 05 сентября 2014

Примечание: я работаю на CodeStreet

Одна вещь, которую вы можете сделать, это использовать CodeStreet «ReplayService for MQ» для записи всех сообщений в вашем DLQ, а затем просматривать / искать их через Web-GUI.

Как только вы найдете сообщения, которые вы хотите отправить, вы можете перетащить их в произвольную тему или очередь MQ или указать запрос на воспроизведение, чтобы воспроизвести их в целевом приложении.

Оформить заказ http://www.codestreet.com/marketdata/jms/jms_mq.php для уточнения деталей.

...