2008-12-04 8 views
2

Я всегда открываю соединение JMS, потому что на нем есть MessageListener.Требуется ли обслуживание на длинных JMS-соединениях?

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

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

ответ

1

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

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

1

Ваш нужно будет обрабатывать два случая:

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

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

3

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

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

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

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

  • Нет связанных вопросов^_^