是否有工具来修改持久的JMS主题消息?

时间:2015-09-15 16:01:00

标签: jms ibm-mq jms-topic

我们正在使用Websphere MQ8并考虑使用持久主题来实现发布和订阅模式。

我们正在使用Queues和Hermes JMS-Browser来纠正错误的队列消息。

我知道您可以使用Hermes订阅主题,但我认为您无法访问和修改已为特定客户端保留的消息。

所以我想知道 - 当客户端无法消费的特定客户端应用程序存在持久消息时,如何处理问题,例如:因为邮件格式错误了吗?

您是否必须删除此客户端的未传递邮件?或者是否有一些工具可以做到这一点?

1 个答案:

答案 0 :(得分:0)

当有持久消息时,如何处理问题? 客户端无法使用的特定客户端应用程序,例如 因为邮件格式错误了?

  

使用应用程序(客户端)应该有适当的异常处理   它应该扔掉所有的坏/毒信息。

您是否必须删除此客户端的所有未传递邮件?或者是否有一些工具可以做到这一点?

  

一旦MQ服务器将自动删除这些消息   TTL(生存时间)到期。我们无法手动删除这些消息   它们属于/意味着原始客户(这是一个耐用的   户)。

以下链接很好地解释了JMS持久订阅的概念: https://docs.oracle.com/cd/E19798-01/821-1841/bncgd/index.html

此外,我还提供了以下示例代码,该代码记录(不会删除)来自持久订阅主题的消息:

   InitialContext ctx = new InitialContext();
   Topic topic = (Topic)ctx.lookup("myJMSTopic1");

   TopicConnectionFactory connFactory = (TopicConnectionFactory) ctx.lookup("topicConnFactory");
   TopicConnection topicConn = connFactory.createTopicConnection();
   topicConn.setClientID("myToolId1"); //Use a different client id than original subscriber

   TopicSession topicSession = topicConn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);

   TopicSubscriber topicSubscriber = topicSession.createDurableSubscriber(topic, "myClientExistingDuraSubName"); // this is where you have to provide the original client's durable subscription name

   while(true) {
        Message message = topicSubscriber.receive();
        TextMessage txtMsg = (TextMessage)message;
        logger.info(txtMsg.getText());
   }