MDB и двойные сообщения - PullRequest
       67

MDB и двойные сообщения

0 голосов
/ 01 августа 2011

Давайте представим, что MDB получил сообщение и начал обрабатывать его в транзакции CMT / Required, и давайте предположим, что транзакция может занять некоторое время.

При таком сценарии возможно ли получение и обработка дубликата сообщения другим экземпляром MDB в другой транзакции, пока первая транзакция еще выполняется?

Или контейнер будет гарантировать, что, пока MDB занят обработкой сообщения в CMT / Обязательной транзакции, никакой другой экземпляр MDB не получит дублирование этого же сообщения?

1 Ответ

0 голосов
/ 01 августа 2011

Я ожидаю, что какое-либо сообщение будет заблокировано во время выполнения транзакции, и дубликаты не должны отправляться, поскольку спецификация JMS требует:

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

, поэтому я думаю, что вы можете положиться на провайдера обмена сообщениями, чтобы гарантировать, чтоMDB не получает вторую копию сообщения, если только первая явно не откатывается или транзакция не выполняется по тайм-ауту и ​​неявно откатывается.Обе эти операции должны «разблокировать» сообщение и сделать его доступным для повторной доставки в MDB, при этом для JMSRedelivered установлено значение true и значение JMSXDeliveryCount увеличено.

Я подозреваю, что есть дополнительные требования для дополнения спецификации JMS в одном (илиподробнее) спецификаций EJB, JCA или JTA (или J2EE, если на то пошло) я не проверял.

...