JMS-соединение - метод запуска (IBM MQ impl)

1

Что такое javax.jms.Connection#start() действительно для. Согласно javadoc, он говорит:

Запускает (или перезапускает) передачу входящих сообщений.

Но что это значит? Я полагаю, это зависит от реализации, так что это значит в IBM MQ (последняя 8+)? Может быть, после этого клиентское соединение будет предварительно кэшировать сообщения сервера? Я проверил несколько примеров производителя, и они вызывают метод запуска, но никогда не читают сообщения. Я протестировал код без вызова start(), и он работал нормально (отправка, а не получение).

Я просто пытаюсь понять, что MQ может быть больше под капотом, чем нужно, но все же я хотел бы знать. Может быть, и как это делается в других реализациях JMS? как Tibco, Apache MQ? Может, кто-то знает?

Теги:
ibm-mq
jms
tibco-ems

2 ответа

4
Лучший ответ

Как указано в документе, метод Connection.start начинает доставку сообщений от поставщика сообщений (в данном случае MQ) к приложению. Потребитель не сможет получать сообщения без вызова Connection.start.

Для отправки сообщений не требуется connection.start. Посмотрите образец JmsConsumer.java, поставляемый с MQ. Он вызывает connection.start. Можете ли вы разместить свой пример кода, который получает сообщения, не вызывая connection.start?

  • 0
    этот код без запуска был использован для отправки сообщения. Мне было только интересно, если нужно позвонить начать при отправке только сообщения. (потому что примеры IBM вызывают запуск даже для отправки)
  • 0
    Хороший момент на примерах; так легко забыть звонок, чтобы начать, мы просто добавляем его все время! Возможно, нужен дополнительный комментарий.
1

Точно так же, как говорит Шаши. Если у вас есть потребитель сообщения и его прием, прежде чем вызывать connection.start(), вы получаете сообщение о получении сообщений. Запустите соединение, и вы получите сообщения.

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

В обоих случаях ничего не будет получено, даже если сообщения находятся в очереди, до вызова connection.start().

Что касается внутренних факторов - есть ли какое-то поведение, которое вы видите, что не можете объяснить? Можете уточнить.

Контексты JMS2.0 автоматически запускаются, поэтому, если вы используете новый вызов API для запуска, не требуется.

  • 0
    так что это просто для получения, не нужно для отправки, Thx.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню