【发布时间】:2016-02-08 16:38:39
【问题描述】:
我有一个 Java 程序,它在创建新主题(订单)时发布它们。当订单更新时,更改后的 Order 对象会重新发布。示例代码如下;
Topic topic = topicSes.createTopic("/DepartmentA/ProjectB/Orders/"+ order.getOrderId());
TopicPublisher topicPub = topicSes.createPublisher(topic);
ObjectMessage om = topicSes.createObjectMessage(order);
om.setIntProperty(JmsConstants.JMS_IBM_RETAIN, JmsConstants.RETAIN_PUBLICATION);
topicPub.send(om);
我发布了一条有害消息(带有“DEAD”参数的消息对象),以便现有订阅者知道我们已经完成了。但是,我不明白的是,一旦主题完成后如何处理,以便新的 订户不接?
在我的 MQ Explorer 会话 (MQ Manager 7.5) 上,我的主题列表是空的。我认为这是因为主题是动态的。只有当我右键单击 [Topics] 并选择 [Status...] 时,我才能看到我的主题字符串。如果我右键单击主题字符串并选择 [Clear Local Retained Publication...],主题最终会消失。我最后说,因为它不是立即的,它需要大约 30 分钟消失。
理想情况下,我想在 JMS、MQ Java 库或 MQ PCF 中以编程方式处理主题字符串。我该怎么做呢? (我不能使用 TemporaryTopics,因为在订单的生命周期中发布过程可能会下降/上升)。
我还尝试通过“runmqsc”查询和清除主题。我不明白的是;
对于显示主题;显示主题字符串的语法是什么 - 语法说明它应该是 DISPLAY TOPIC (topic) TOPICSTR(string),但是对于给定的字符串“/DepartmentA/ProjectB/Orders/123”,我尝试了各种组合,但对我没有任何作用。我似乎只能让它为管理主题工作。
对于CLEAR TOPICSTR,我可以将任何内容作为主题字符串参数,“runmqsc”从不抱怨,但即使字符串正确,它仍然什么都不做。 CLEAR TOPICSTR 的正确语法应该是什么?
我应该将“/DepartmentA”设为托管主题吗?
【问题讨论】: