基于每个IIB实例放入本地队列管理器的以下流:
IIB1 -> QM1 -> QLOCAL(L.TO.FLOW) CLWLRANK(0) CLWLPRTY(4) CLWLUSEQ(ANY)
IIB2 -> QM2 -> QLOCAL(L.TO.FLOW) CLWLRANK(0) CLWLPRTY(3) CLWLUSEQ(ANY)
IIB3 -> QM3 -> QLOCAL(L.TO.FLOW) CLWLRANK(0) CLWLPRTY(2) CLWLUSEQ(ANY)
IIB4 -> QM4 -> QLOCAL(L.TO.FLOW) CLWLRANK(0) CLWLPRTY(1) CLWLUSEQ(ANY)
*假设
CLWLRANK
,
CLWLPRTY
,及
NETPRTY
总之
CLUSRCVR
CLWLPRTY
.
从集群工作负载管理算法的角度来看,队列实例可能不可用,原因有很多。我在本文末尾引用了知识中心,该中心提供了算法的详细解释。两个常见的原因是:
-
队列管理器已关闭
-
队列是
PUT(DISABLED)
每个IIB实例将仅
GET
从同一队列管理器上的本地队列,IIB实例也被连接。在上面描述的设置中,这意味着在正常情况下,如果所有四个队列管理器都启动,则只有连接到QM1的IIB实例才会接收消息。
Reference>Configuration reference>IBM MQ cluster commands>Workload balancing in clusters>The cluster workload management algorithm
“,我提供了适用于您问题中所述设置的选项:
从可能的目的地列表中选择目的地。
-
A.将尽可能消除未启用put的队列
目的地。
-
如果出现以下三种情况之一,则使用队列的本地实例
是真的:
-
在更广泛的适用条件范围内,这些点是正确的:
A.根据队列所在集群中本地定义的CLUSRCVR通道的状态选择本地队列。
将此状态与以下CLUSSDR通道的状态进行比较:
将消息传送到远程定义的同名队列。
在这种情况下,将选择远程通道,而不使用本地队列。
B本地队列根据CLUSRCVR通道的数量选择,与相同状态的CLUSSDR通道进行任何比较,
这将把消息带到远程定义的相同队列
名称
例如,在与队列相同的集群中有四个CLUSRCVR通道和一个CLUSSDR通道。所有频道都有相同的频道
非活动或正在运行的状态。
本地队列。
-
如果只保留队列或主题的远程实例,则优先选择恢复的队列管理器,而不是挂起的队列管理器。
-
如果队列或主题的多个远程实例仍然存在,则包括所有非活动或正在运行的通道。国家
-
MQCHS_INACTIVE
-
MQCHS_RUNNING
-
如果队列或主题的远程实例不存在,则处于绑定、初始化、启动或停止状态的所有通道都将被删除
包括。列出了状态常数:
-
MQCHS_BINDING
-
MQCHS_INITIALIZING
-
MQCHS_STARTING
-
MQCHS_STOPPING
-
-
如果队列或主题的远程实例不存在,则包括处于请求、暂停或停止状态的所有通道。状态常数
名单如下:
-
MQCHS_REQUESTING
-
MQCHS_PAUSED
-
MQCHS_STOPPED