如何在IBM MQ群集中即时创建订阅



当我将此代码用作订户时:

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/FruitItems/Produce/Vegetables并广告到集群,则可以授权人们对此进行授权。在这种情况下,仅授权Items/Produce/Fruit的人无法公开或订阅Items/Produce/Vegetables。但是,如果他们想发布到Items/Produce/Fruit/Apples/Gala,他们将能够动态创建该主题,并且它将通过群集分发。

您做的不是想要的是让qmgrs Publish all 他们的主题在整个集群中,因为他们会然后在系统主题上获得彼此的内部流量。除了吸收QMGR上的资源外,网络还可能从巨大的网络中饱和,甚至会导致一个小集群。

因此,简短的答案是,如果您要定义主题名称空间的顶部并将其宣传到群集,则可以动态生成该根节点下方的主题,这也可以在群集周围传播。

最新更新