【发布时间】:2014-06-14 01:26:39
【问题描述】:
我目前正在从事一个项目,我需要与 IBM 系统进行交互,该系统通过 WebSphere MQ 与外部世界进行通信。我需要使用队列以“请求-响应”方式查询系统,我将通过队列管理器执行此操作。
但是,我无法完全理解这实际上是如何工作的。
假设我有多个将消息放入请求队列的应用程序实例。消息在离开应用程序时获得CorrelationId 和MessageId,并在每条消息上设置ReplyToQueue 属性,以确保队列管理器知道将响应放入哪个队列。
但是,队列管理器如何操作响应队列?响应的时间无法保证,那么正确的响应如何返回到发出相应请求的应用实例?
我一直认为消息队列是一个 FIFO 队列,其中消息必须一一挑选。但是,这意味着实例 A 可以选择一个针对实例 B 的响应。显然,这不是它的工作原理。
然后,当我查看 API (com.ibm.mq.MQQueue) 时,我发现要选择一条消息,我有机会提供请求消息的 CorrelationId 和 MessageId。这是否意味着当我向队列管理器查询消息(设置了这些 ID)时,队列管理器会遍历队列中的消息并返回匹配的消息?另一方面,这是否意味着我们不是在谈论 FIFO 队列?
【问题讨论】:
-
为了添加到其他响应中,WMQ 保留了
MsgID和CorrelID字段的索引,因此这些字段上的任何GET不需要遍历所有消息以找到正确的一。请参阅 WMQ 信息中心中的Designing WebSphere MQ applications,了解有关开发排队应用程序的更多讨论。
标签: jms message-queue ibm-mq