Я могу ответить за 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)