Трудно однозначно говорить о том, как работают клиент и сервер IBM WebSphereMQ, поскольку они имеют закрытый исходный код, но на основании моего опыта работы с другими реализациями обмена сообщениями я могу дать общее объяснение.
Соединение JMSинициируется клиентом на сервер.Клиент JMS использует javax.jms.ConnectionFactory
для создания javax.jms.Connection
, который является соединением между клиентом и сервером.
Обычно, когда клиент использует пул, пул либо заполняется «с нетерпением» (что означает определенныйчисло соединений создается, когда пул инициализируется, чтобы заполнить его до определенного уровня) или «лениво» (что означает, что пул заполняется соединениями по одному, когда клиенты запрашивают их из пула).Если клиент запрашивает соединение из пула и если все соединения в пуле используются и максимальный размер соединений, разрешенных пулом, не достигнут, то будет создано другое соединение.Если пул достиг максимально допустимого размера (т. Е. Больше соединений не может быть создано), тогда клиент, запрашивающий соединение, должен будет ждать, пока другой клиент вернет свое соединение в пул, и в этот момент пул передаст его ожидающему.client.
JMS-клиент может узнать о сообщениях на сервере несколькими различными способами.
Если JMS-клиент хочет время от времени запрашивать сервер о сообщениях, которые он имеет в определенной очередион может создать javax.jms.Consumer
и использовать метод receive()
.Этот метод может ожидать сообщения в очереди бесконечно, или он может принимать параметр тайм-аута, чтобы, если сообщение не приходит в указанное время, возвращался вызов receive()
.
ЕслиКлиент JMS хочет получить сообщение из определенной очереди, как только сообщение поступит в очередь, тогда он может создать реализацию javax.jms.MessageListener
и зарегистрировать его в очереди.Когда такой слушатель зарегистрирован в очереди, тогда, когда в очередь поступает сообщение, сервер отправит сообщение слушателю.Это иногда называют «обратным вызовом», поскольку сервер «перезванивает» клиенту.