Требуется ли обслуживание на долгоживущих соединениях JMS? - PullRequest
2 голосов
/ 04 декабря 2008

Я всегда поддерживаю соединение JMS, потому что у меня есть MessageListener.

Распространено ли беспокойство о минимизации обслуживания приложений с долгоживущими JMS-соединениями?

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

Ответы [ 3 ]

3 голосов
/ 04 декабря 2008

Хороший провайдер JMS будет иметь дело с перебоями в работе сети, такими как сбрасывание сокета или сбой или перезапуск брокера сообщений. например Вот как вы включаете автоматическое переподключение в Apache ActiveMQ .

Часто довольно сложно воссоздать все ваши ресурсы JMS (соединения, сеансы, производители, потребители) - поставщику JMS гораздо проще сделать это для вас.

Если вам нужен поставщик, который не может поддерживать эту функцию - рассмотрите возможность переключения или использования вспомогательных классов Spring JMS, которые могут сделать это за вас.

1 голос
/ 04 декабря 2008

В стандартной спецификации JMS нет ничего, что гарантировало бы, что проблемы с подключением не будут видны приложению. Может быть, есть некоторые поставщики, которые делают это как расширение (как предлагает Джеймс Страчан).

Если вам нужен надежный клиент JMS, который не зависит от расширений поставщика, вам нужно обработать ошибки и выполнить переподключение. См. Повторное подключение JMS-слушателя к JBossMQ (что, несмотря на название, не относится к JBossMQ).

1 голос
/ 04 декабря 2008

Вам потребуется обработать два случая:

  1. Брандмауэр между вами и сервером JMS. Большинство брандмауэров через пару часов обрезают «простое» соединение. Если это так, отправляйте сообщение каждый час или около того или, если можете, включите TCP_KEEPALIVE. Это опция TCP / IP, которая заставит базовый сокет отправить тестовое сообщение через некоторое время.
  2. Другой сервер перезагружен. Когда это произойдет, вы получите сообщение об ошибке «потеря соединения» при попытке отправить следующее сообщение. В этом случае просто откройте соединение еще раз и попробуйте снова.

Я предлагаю установить локальный сервер JMS (подойдет любой), подключить к нему ваше приложение и остановить сервер. Это даст вам сообщение об ошибке для случая № 2. Затем напишите модульный тест с помощью MockRunner , чтобы убедиться в правильности обработки ошибок.

...