Что такое javax.jms.Connection#start()
действительно для. Согласно javadoc, он говорит:
Запускает (или перезапускает) передачу входящих сообщений.
Но что это значит? Я полагаю, это зависит от реализации, так что это значит в IBM MQ (последняя 8+)? Может быть, после этого клиентское соединение будет предварительно кэшировать сообщения сервера? Я проверил несколько примеров производителя, и они вызывают метод запуска, но никогда не читают сообщения. Я протестировал код без вызова start(), и он работал нормально (отправка, а не получение).
Я просто пытаюсь понять, что MQ может быть больше под капотом, чем нужно, но все же я хотел бы знать. Может быть, и как это делается в других реализациях JMS? как Tibco, Apache MQ? Может, кто-то знает?
Как указано в документе, метод Connection.start начинает доставку сообщений от поставщика сообщений (в данном случае MQ) к приложению. Потребитель не сможет получать сообщения без вызова Connection.start.
Для отправки сообщений не требуется connection.start. Посмотрите образец JmsConsumer.java, поставляемый с MQ. Он вызывает connection.start. Можете ли вы разместить свой пример кода, который получает сообщения, не вызывая connection.start?
Точно так же, как говорит Шаши. Если у вас есть потребитель сообщения и его прием, прежде чем вызывать connection.start(), вы получаете сообщение о получении сообщений. Запустите соединение, и вы получите сообщения.
Аналогично, если у вас установлен набор слушателей сообщений, он не начнет получать какие-либо сообщения, пока не будет вызвано connection.start().
В обоих случаях ничего не будет получено, даже если сообщения находятся в очереди, до вызова connection.start().
Что касается внутренних факторов - есть ли какое-то поведение, которое вы видите, что не можете объяснить? Можете уточнить.
Контексты JMS2.0 автоматически запускаются, поэтому, если вы используете новый вызов API для запуска, не требуется.