Какие реализации JMS-брокера позволяют пересылать сообщения, сохраненные в очереди мертвых сообщений?
Интересно, если есть JMS-брокер, который позволяет администраторам повторно отправлять (через графический интерфейс или любой инструмент) сообщения, сохраненные в очереди сообщений ded или очереди недоставленных сообщений, после решения вызывающей проблемы (например, база данных не работает, недостаточно места...).
WebSphere предоставляет возможность пересылать сообщения, сохраненные в очереди недоставленных сообщений: 1
Glassfish 2.1.1, использующий Sun Java System Message Queue 4.4, не имеет возможности сделать это, я так думаю.
Какие варианты есть у других JMS-брокеров? Или это лучший способ не использовать функцию DMQ/DLQ, если вы зависите от сообщения?
большое спасибо
2 ответа
Я могу ответить за 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)
Примечание: я работаю на CodeStreet
Одна вещь, которую вы могли бы сделать, это использовать CodeStreet "ReplayService for MQ" для записи всех сообщений в вашем DLQ, а затем просматривать / искать их через Web-GUI.
Как только вы найдете сообщения, которые вы хотите отправить, вы можете перетащить их в произвольную тему или очередь MQ или указать запрос на воспроизведение, чтобы воспроизвести их в целевом приложении.
Оформить заказ http://www.codestreet.com/marketdata/jms/jms_mq.php для получения дополнительной информации.