当我将此代码用作订户时:
MQTopic QMsSubscription = qm.accessTopic("qmstop", "", CMQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, CMQC.MQSO_CREATE);
MQMessage recvQMsMsg = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQGMO_WAIT;
gmo.waitInterval = MQConstants.MQWI_UNLIMITED;
QMsSubscription.get(recvQMsMsg, gmo);
和此发布者的代码:
MQTopic QMsPublisher = qm.accessTopic("qmstop", "", CMQC.MQTOPIC_OPEN_AS_PUBLICATION, CMQC.MQOO_OUTPUT);
MQMessage sendQMsMsg = new MQMessage();
sendQMsMsg.writeString(thisQM);
QMsPublisher.put(sendQMsMsg);
这些代码在一台机器中与一台队员管理器一起效果很好,但是当我在群集中使用这些代码与许多队列经理一起使用时,消息未发送到其他机器。
如何在集群中飞行创建主题弦?
通常,您不会使用MQ中的qmstop
之类的主题。原因是MQ使用Pub/sub进行许多自己的操作,任何可以在主题树的顶部发布或订阅的人都可以注入或订阅MQ Internal Internal Pub/sub Messages。
它打算在MQ中使用的方式是您首先设计一个主题名称空间。通常,这具有一个根节点,其余的主题树可以宽阔,浅,高,深或稀疏。但是,至少总是有一个根节点。
具有根节点后,您为其定义一个主题对象。例如,想象以下主题名称空间:
Items
Produce
Fruits
Apples
Bananas
Cherries
Vegetables
Asparagus
Beets
Carrots
如果定义指向项目的主题对象,则可以将其宣传到群集。定义了主题对象后,您可以将访问控制列表悬挂下来,以便您可以定义谁可以发布并可以订阅谁。
一个可以访问发布或订阅项目的人,然后可以动态地创建以Items
为根的任何主题字符串。例如,他们可以发布或订阅Items/Produce
。由于项目已广告给集群,因此动态创建的Items/Produce
将通过群集分发。
类似地,如果定义了主题对象指向Items/Produce/Fruit
和Items/Produce/Vegetables
并广告到集群,则可以授权人们对此进行授权。在这种情况下,仅授权Items/Produce/Fruit
的人无法公开或订阅Items/Produce/Vegetables
。但是,如果他们想发布到Items/Produce/Fruit/Apples/Gala
,他们将能够动态创建该主题,并且它将通过群集分发。
您做的不是想要的是让qmgrs Publish all 他们的主题在整个集群中,因为他们会然后在系统主题上获得彼此的内部流量。除了吸收QMGR上的资源外,网络还可能从巨大的网络中饱和,甚至会导致一个小集群。
因此,简短的答案是,如果您要定义主题名称空间的顶部并将其宣传到群集,则可以动态生成该根节点下方的主题,这也可以在群集周围传播。