从 Websphere MQ 中删除动态主题
Deleting Dynamic Topics from Websphere MQ
我有一个 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) 中,我的主题列表是空的。我认为这是因为主题是动态的。只有当我右键单击 [主题] 并选择 [状态...] 时,我才能看到我的主题字符串。如果我右键单击主题字符串并选择 [清除本地保留出版物...],主题最终会消失。我最后说,因为它不是立即的,大约需要 30 分钟才能消失。
理想情况下,我想在 JMS 或 MQ Java 库或 MQ PCF 中以编程方式处理主题字符串。我该怎么做呢? (我不能使用 TemporaryTopics,因为发布过程可能会在订单的生命周期内进行 down/up)。
我也尝试通过"runmqsc"查询和清除主题。我不明白的是;
对于显示主题;显示主题字符串的语法是什么——语法规定它应该是 DISPLAY TOPIC (topic) TOPICSTR(string),但是对于给定的字符串“/DepartmentA/ProjectB/Orders/123”,我尝试了各种组合,但对我没有任何用处。我似乎只能让它为管理主题工作。
对于 CLEAR TOPICSTR,我可以将任何内容作为主题字符串参数并且 "runmqsc" 从不抱怨,但即使字符串正确,它仍然无能为力。 CLEAR TOPICSTR 的正确语法应该是什么?
我是否应该将“/DepartmentA”设为托管主题?
TREELIFE 默认为 30 分钟,您可以更改 TREELIFE 间隔。查看以下 MQ 信息中心 URL 了解详细信息。
http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.pla.doc/q005060_.htm?lang=en
您正确地意识到主题字符串是动态的。您可能想阅读这篇文章
https://www.ibm.com/developerworks/community/blogs/messaging/entry/mq_topics_but_which_type?lang=en
或观看这个
https://www.youtube.com/watch?v=szqdtIEgTR4
他们应该解释您想要理解的概念。
如前所述,默认情况下,未使用的主题字符串将在 30 分钟后被垃圾回收,这是为了节省资源。系统需要在创建它们时尽快删除它们,以确保系统不会过载。但是,当没有人向他们发布内容时将它们放在那里应该不会产生任何功能性影响。
您应该意识到不断生成新主题字符串会产生开销,因此如果您创建和删除了数千个主题字符串,您可能会看到这一点。
对于您的具体问题,使用 DISPLAY TPSTATUS('string') 来查看与查看 MQExplorer 中的主题状态等效的内容(仅供参考,如果您想使用通配符您使用主题字符 # 或 + 的字符串)。
CLEAR TOPICSTR 只是删除当前为主题字符串保留的任何保留消息。不能对具有关联保留消息的主题字符串进行垃圾回收。如果您不使用保留的消息,它将无效。
正如您将从这些链接中看到的,如果您想要将其配置为与树的其余部分不同,或者您想要授予对该分支的特定访问权限,则只需将 /DepantmentA 设为托管主题树.
我有一个 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) 中,我的主题列表是空的。我认为这是因为主题是动态的。只有当我右键单击 [主题] 并选择 [状态...] 时,我才能看到我的主题字符串。如果我右键单击主题字符串并选择 [清除本地保留出版物...],主题最终会消失。我最后说,因为它不是立即的,大约需要 30 分钟才能消失。
理想情况下,我想在 JMS 或 MQ Java 库或 MQ PCF 中以编程方式处理主题字符串。我该怎么做呢? (我不能使用 TemporaryTopics,因为发布过程可能会在订单的生命周期内进行 down/up)。
我也尝试通过"runmqsc"查询和清除主题。我不明白的是;
对于显示主题;显示主题字符串的语法是什么——语法规定它应该是 DISPLAY TOPIC (topic) TOPICSTR(string),但是对于给定的字符串“/DepartmentA/ProjectB/Orders/123”,我尝试了各种组合,但对我没有任何用处。我似乎只能让它为管理主题工作。
对于 CLEAR TOPICSTR,我可以将任何内容作为主题字符串参数并且 "runmqsc" 从不抱怨,但即使字符串正确,它仍然无能为力。 CLEAR TOPICSTR 的正确语法应该是什么?
我是否应该将“/DepartmentA”设为托管主题?
TREELIFE 默认为 30 分钟,您可以更改 TREELIFE 间隔。查看以下 MQ 信息中心 URL 了解详细信息。
http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.pla.doc/q005060_.htm?lang=en
您正确地意识到主题字符串是动态的。您可能想阅读这篇文章
https://www.ibm.com/developerworks/community/blogs/messaging/entry/mq_topics_but_which_type?lang=en
或观看这个
https://www.youtube.com/watch?v=szqdtIEgTR4
他们应该解释您想要理解的概念。
如前所述,默认情况下,未使用的主题字符串将在 30 分钟后被垃圾回收,这是为了节省资源。系统需要在创建它们时尽快删除它们,以确保系统不会过载。但是,当没有人向他们发布内容时将它们放在那里应该不会产生任何功能性影响。
您应该意识到不断生成新主题字符串会产生开销,因此如果您创建和删除了数千个主题字符串,您可能会看到这一点。
对于您的具体问题,使用 DISPLAY TPSTATUS('string') 来查看与查看 MQExplorer 中的主题状态等效的内容(仅供参考,如果您想使用通配符您使用主题字符 # 或 + 的字符串)。
CLEAR TOPICSTR 只是删除当前为主题字符串保留的任何保留消息。不能对具有关联保留消息的主题字符串进行垃圾回收。如果您不使用保留的消息,它将无效。
正如您将从这些链接中看到的,如果您想要将其配置为与树的其余部分不同,或者您想要授予对该分支的特定访问权限,则只需将 /DepantmentA 设为托管主题树.