我有两台机器 - 机器1和机器2.机器1有一个队列管理器QM1和一个代理(集成服务器)BR1和机器2有一个队列管理器QM2和一个代理(集成服务器)BR2。我想在QM1和QM2之间建立一个集群。我在QM2中创建了一个名为INVENTQ的远程集群队列。问题是我能够在任何队列管理器上成功发布任何消息,并且我能够在QM2中的INVENTQ上看到相应的消息。但是我希望架构以这样的方式,除了创建队列INVENTQ的队列管理器,即QM2之外,我能够从任何队列管理器接收来自队列的消息。有人可以指导我吗?
答案 0 :(得分:2)
MQ没有'远程获取'功能 - 即您不能将本地绑定用于队列管理器并从另一个队列管理器获取消息。如果要执行此操作,则需要使用客户端绑定转到消息所在的队列管理器。
在MQPUT时,必须做出决定(在推送队列管理器上),将消息转发到哪里(例如,哪个本地队列,或哪个传输队列将其传递给另一个队列管理器)。
在群集设置中,如果您在一个队列管理器上定义了一个队列并将其置于群集中,则任何来自任何群集队列管理器的任何人都可以将其置于本地队列中。但是,它们的MQPUT导致消息(通过集群通道)到达一个特定实例。因此,从一个不同的队列管理器,你可以将消息放入队列,你无法得到它。
根据@JoshMc的建议,您可以在多个队列管理器和群集上定义具有相同名称的队列,但这意味着在MQPUT时,消息将路由到一个且仅一个实例该队列的一部分 - 如果它被路由到远程队列管理器集群定义,您仍然无法从本地队列管理器获取它。想象一下,你有一个3 qmgrs的集群。您可以创建一个名为' FRED'的群集队列。其中2个。所有这些都可以放到FRED中 - 但是其中2个默认只放到它们的本地队列(除非你设置CLWLUSEQ = ANY),另一个将(通常)在两个远程实例之间交替。每个队列肯定会有不同的消息。