В настоящее время я работаю над проектом, где мне нужно взаимодействовать с системой IBM, которая взаимодействует с внешним миром через WebSphere MQ. Мне нужно запросить систему в режиме "запрос-ответ", используя очереди, и я буду делать это через диспетчер очереди.
Однако я не могу понять, как это работает на практике.
Скажем, у меня есть несколько экземпляров одного и того же приложения, которое помещает сообщение в очередь запросов. Сообщение выходит из CorrelationId
и MessageId
после выхода из приложения, а свойство ReplyToQueue
устанавливается на каждое сообщение, чтобы убедиться, что диспетчер очереди знает, в какую очередь помещать ответ.
Однако как диспетчер очереди управляет очередью ответов? Нет гарантии относительно сроков ответов, так как получается, что правильный ответ возвращается к экземпляру приложения, который выдал соответствующий запрос?
Я продолжаю думать о очередях сообщений как очередь FIFO, где сообщения должны выбираться один за другим. Однако это означает, что экземпляр A может выбрать ответ, например, B. Очевидно, что это не может быть так, как это работает.
Затем, когда я смотрю на API (com.ibm.mq.MQQueue
), я вижу, что для выбора сообщения у меня есть возможность предоставить CorrelationId
и MessageId
сообщения запроса. Означает ли это, что когда я запрашиваю диспетчер очереди для сообщения (с этим набором идентификаторов), менеджер очереди выполняет итерацию через сообщения в очереди и возвращает соответствующее сообщение? С другой стороны, это означает, что мы не говорим о очереди FIFO?