Могут ли долговременные подписки пережить перезапуск клиента? - PullRequest
4 голосов
/ 20 июля 2010

Если я использую долговременную подписку, могу ли я перезапустить свой клиент и повторно подписаться, не потеряв ни одного сообщения?(Предполагая, что мой клиент не отписывается ни в коем случае. Допустим, он просто падает).

Позвольте мне уточнить.Спецификация JMS 1.1 говорит следующее:

9.3.3.2 Повторное подключение к теме с использованием долговременной подписки

/* Reconnect to a durable subscription */
session.createDurableSubscriber(newsFeedTopic, "mySubscription");

Однако существуют некоторые важные ограничения, о которых следует знать:

  • Клиент должен быть подключен к тому же соединению.
  • Имя адресата и подписка должны совпадать.
  • Если был указан селектор сообщений, он также должен совпадать.

Это «то же соединение»часть меня интересует.Не ясно, что означает «то же самое» в этом контексте.

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

В спецификации рассмотрим 4.3, где упоминается, что объект Connection может содержать уникальный идентификатор клиента, и 4.3.2, в котором говорится ...

Назначение идентификатора клиента состоит в том, чтобысвязать соединение и его объекты с состоянием, поддерживаемым поставщиком от имени клиента.По определению, состояние клиента, идентифицируемое идентификатором клиента, может «использоваться» только одним клиентом одновременно.JMS-провайдер должен запретить одновременное использование его клиентами-исполнителями.

Таким образом, здесь подразумевается, что долговременная подписка содержит уникальный идентификатор, чтобы при повторной подписке приложения его можно было присоединить к правильному хранилищу состоянийгде сообщения были поставлены в очередь в его отсутствие.Поскольку предпочтительным способом сделать это является кодирование идентификатора в объекте подключения, специфичном для клиента, спецификация направляет вас на повторное подключение с использованием того же подключения, но в этом случае это означает тот же администрируемый объект не то же соединение дескриптор (для использования терминологии WMQ).

Конечно, вам не нужен управляемый объект, приложение может динамически создавать соединение.В этом случае вам нужно будет организовать использование одного и того же идентификатора клиента для последовательных подозрений.

2 голосов
/ 21 июля 2010

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

...