2015-08-13 2 views
1

Я использую Spring Integration для подключения к IBM MQ. У меня есть поток, где я получил сообщение от входящей очереди, и если сообщение об ошибке было отправлено в очередь ошибок. Что делать, если мое приложение завершено, а IBM MQ не работает, моя служба все равно будет запущена или будет выдавать какие-либо ошибки? Возвращает ли Spring Integration снова, если IBM MQ запускается без перезапуска сервера? Я думаю, что существует параметр restoreInterval DefaultMessageListenerContainer, который попытается восстановить, если соединение MQ прерывается. Правильно ли я понимаю?Автоматическое повторное подключение Spring к IBM MQ

Благодаря Сэчин

ответ

0

Да, он будет продолжать пытаться восстановить; обязательно используйте acknowledge=transacted (или setSessionTransacted(true)) с DMLC, чтобы избежать потери сообщений.

+0

Да, это делает трюк. Благодарю. мы признаем = транзакцией для DMLC. Что делать, если процесс передачи сообщений продолжается, а MQ отключается, а сообщение имеет некоторую ошибку, которая должна идти в очередь ошибок, но по мере того, как MQ вниз, он не отправляет сообщение в очередь ошибок. Мы пробовали этот сценарий, и сообщение потеряно. Я думал, что сообщение поступит во входящую очередь, или как только MQ вернется, он перейдет в очередь ошибок, но, похоже, он работал таким образом. Как мы обрабатываем выше scenerio? – sach

+0

Вы должны быть уверены, что поток контейнера слушателя не передает сообщение другому потоку; если это произойдет, сообщение будет удалено в этот момент. Если вы сохраните все на контейнерной нити, если брокер снизится, сообщение в полете будет отменено. –

+0

Как подтвердить, что сообщение передано в другой поток? Я полностью полагаюсь на контейнерную нить. – sach

Смежные вопросы