вопрос по JMS receive () / MessageListener приоритет - PullRequest
1 голос
/ 04 августа 2011

Если я установлю MessageListener объект для MessageConsumer, а затем вызову receive() для этого потребителя, что произойдет?Передаст ли провайдер сообщение receive() или будет по-прежнему блокироваться, пока сообщение обрабатывается объектом MessageListener?

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

Вы получите исключение, так как сеанс должен быть в асинхронном или синхронном режимах. С 4.4.6 спецификации JMS

Одним из следствий ограничения единственного потока управления сеанса является то, что сеанс с прослушивателями сообщений также нельзя использовать для синхронного приема Сообщения. Либо сеанс посвящен потоку управления, используемому для доставка к слушателям сообщений или она посвящена инициированному потоку управления по коду клиента. Ошибочно пытаться объединить оба в одном сеансе.

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

Мне трудно представить себе ситуацию, когда это имеет смысл.

Предположим, что ваш receive () не имел приоритета.Тогда, по-видимому, нет никакого эффекта.

Предположим, что ваш receive () имел приоритет.Что бы вы ожидали после получения сообщения?Предположительно, до тех пор, пока вы не позвоните снова, получатель сообщений будет принимать сообщения?В этом случае поведение вашей системы фактически является одним из огромных условий гонки, точное время прибытия сообщений вызывает другое поведение.

Вы должны быть в состоянии добиться большего успеха, чем это.Имейте «адаптивного» MessageConsumer, поведение которого вы, возможно, можете контролировать.

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