Как MQ Client, такой как Java Client, прослушивает сообщения с MQ Server, на котором работает ServerConn Channel - PullRequest
0 голосов
/ 03 марта 2019

Я ищу подробное описание того, как клиент или слушатель IBM MQ получают сообщения от MQ Server, когда новые сообщения помещаются в очередь или тему MQ.

  1. Как происходит соединение между клиентом MQ и MQСервер создан?
  2. MQ Client инициирует соединение с сервером или сервер инициирует соединение с его потребителем?
  3. Если у нас в MQ Client определен пул соединений, как клиент узнает, что ему нужно создавать больше соединений с сервером по мере увеличения количества сообщений на сервере?Как Клиент узнает о сообщениях на Сервере?
  4. Есть ли связь между Сервером и Клиентом, которая сообщает клиенту о поступлении новых сообщений?

Я ищу эти данные, а не деталио том, как это настроить или как настроить каналы MQ или слушателей.Я ищу, как это работает за сценой.

Если кто-то может указать мне правильное направление или документацию, было бы здорово.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Первое, что вы должны сделать, это пройти курс обучения по JMS / IBM MQ или перейти на новую конференцию IBM под названием: Техническая конференция по интеграции

Хорошо, теперь на ваши вопросы:

  1. Как создается соединение между MQ Client и MQ Server?

Вы просто запускаете метод createQueueConnection класса QueueConnectionFactory и задаете учетные данные.

QueueConnection conn = cf.createQueueConnection("myUserId", "myPwd");
MQ Client инициирует соединение с сервером или сервер инициирует соединение с его потребителем?

Клиентское приложение MQ запускает соединение - всегда.

Если у нас в MQ Client определен пул соединений, как клиент узнает, что ему нужно создавать больше соединений с сервером, поскольку количество сообщений увеличивается на сервере?Как Клиент узнает о сообщениях на Сервере?

Архитектор или ведущий разработчик команды должен понять поток сообщений и шаблоны сообщений.Следовательно, они будут знать, на что установить количество пулов.Кроме того, много-много испытаний тоже.Некоторым клиентским приложениям потребуется всего 10 пулов, тогда как другим приложениям может потребоваться 50, потому что это большой поток.

Имеется ли связь между сервером и клиентом, которая сообщает клиенту о поступлении новых сообщений?

Для получения сообщения используется метод createReceiver класса QueueSession.Задайте значение тайм-аута для метода createReceiver вместо непрерывного опроса администратора очередей.

Опять же, настоятельно рекомендуется некоторое обучение использованию JMS / IBM MQ.

0 голосов
/ 03 марта 2019

Трудно однозначно говорить о том, как работают клиент и сервер IBM WebSphereMQ, поскольку они имеют закрытый исходный код, но на основании моего опыта работы с другими реализациями обмена сообщениями я могу дать общее объяснение.

Соединение JMSинициируется клиентом на сервер.Клиент JMS использует javax.jms.ConnectionFactory для создания javax.jms.Connection, который является соединением между клиентом и сервером.

Обычно, когда клиент использует пул, пул либо заполняется «с нетерпением» (что означает определенныйчисло соединений создается, когда пул инициализируется, чтобы заполнить его до определенного уровня) или «лениво» (что означает, что пул заполняется соединениями по одному, когда клиенты запрашивают их из пула).Если клиент запрашивает соединение из пула и если все соединения в пуле используются и максимальный размер соединений, разрешенных пулом, не достигнут, то будет создано другое соединение.Если пул достиг максимально допустимого размера (т. Е. Больше соединений не может быть создано), тогда клиент, запрашивающий соединение, должен будет ждать, пока другой клиент вернет свое соединение в пул, и в этот момент пул передаст его ожидающему.client.

JMS-клиент может узнать о сообщениях на сервере несколькими различными способами.

Если JMS-клиент хочет время от времени запрашивать сервер о сообщениях, которые он имеет в определенной очередион может создать javax.jms.Consumer и использовать метод receive().Этот метод может ожидать сообщения в очереди бесконечно, или он может принимать параметр тайм-аута, чтобы, если сообщение не приходит в указанное время, возвращался вызов receive().

ЕслиКлиент JMS хочет получить сообщение из определенной очереди, как только сообщение поступит в очередь, тогда он может создать реализацию javax.jms.MessageListener и зарегистрировать его в очереди.Когда такой слушатель зарегистрирован в очереди, тогда, когда в очередь поступает сообщение, сервер отправит сообщение слушателю.Это иногда называют «обратным вызовом», поскольку сервер «перезванивает» клиенту.

...