当我使用此代码作为订阅者时:
class Product(model.Models):
def saveProduct(self, product):
if self.validateProduct(product):
product.save()
def validateProduct(self, product):
try:
product.full_clean()
except ValidationError:
return False
return True
以及发布商的此代码:
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);
这些代码在一台具有一个队列管理器的计算机上运行良好,但是当我在具有许多队列管理器的群集中使用这些代码时,消息不会发送到其他计算机。
如何在群集中动态创建主题字符串?
答案 0 :(得分:0)
通常,您不会在MQ中使用qmstop
之类的主题。原因是MQ使用Pub / Sub进行许多自己的操作,任何可以在主题树顶部发布或订阅的人都可以注入或订阅MQ内部发布/订阅消息。
在MQ中工作的方式是首先设计一个主题名称空间。通常,这有一个根节点,在该根节点下,主题树的其余部分可以是宽的和浅的,高的和深的,或稀疏的。但是,至少总是有一个根节点。
获得根节点后,为其定义主题对象。例如,假设以下主题命名空间:
Items
Produce
Fruits
Apples
Bananas
Cherries
Vegetables
Asparagus
Beets
Carrots
如果定义指向Items的主题对象,则可以将其通告给群集。定义主题对象后,您可以挂起访问控制列表,以便您可以定义谁可以发布以及谁可以订阅。
有权发布或订阅Items的人可以动态创建任何以Items
为根的主题字符串。例如,他们可以发布或订阅Items/Produce
。由于已将项目通告给群集,因此动态创建的Items/Produce
将通过群集进行分发。
同样,如果定义了指向Items/Produce/Fruit
和Items/Produce/Vegetables
并向群集公布的主题对象,则可以授权人员使用这些对象。在这种情况下,仅授权Items/Produce/Fruit
的人无法发布或订阅Items/Produce/Vegetables
。但是,如果他们想要发布到Items/Produce/Fruit/Apples/Gala
,他们将能够动态创建该主题,并将通过群集进行分发。
您所做的 不 想让QMgrs在整个群集中发布 所有 他们的主题,因为他们会然后互相让对方'系统主题的内部流量。除了吸收QMgr上的资源之外,网络可能会从巨大的网络风暴中饱和,这甚至会导致一个小型集群。
简而言之,如果您要定义主题命名空间的顶部并将其通告给群集,则可以在该根节点下方动态生成主题,该主题也会在群集中传播。