我们正在使用Websphere MQ8,并考虑使用持久主题来实现发布和订阅模式。
我们已经在使用Queues和Hermes JMS-Browser来纠正错误的队列消息。
我知道你可以使用Hermes订阅主题,但我认为你不能访问和修改已经为特定客户端保留的消息。
所以我想知道--当特定客户端应用程序存在客户端不能使用的持久消息时,例如消息格式错误,您如何处理这些问题?
您是否必须删除此客户端的所有未送达邮件?或者有没有什么工具可以做到这一点?
发布于 2015-09-16 23:43:59
当特定客户端应用程序存在客户端无法使用的持久性消息时(例如,由于消息格式错误),您如何处理问题?
使用
的应用程序(客户端)应该有适当的异常处理,并且应该抛出所有坏的/有害的消息。
是否必须删除此客户端的所有未送达邮件?或者有没有什么工具可以做到这一点?
一旦TTL (生存时间)到期,MQ服务器将自动删除消息。我们不能手动删除这些消息,因为它们属于/意味着原始客户端(这是一个持久的订阅者)。
下面的链接很好地解释了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());
}https://stackoverflow.com/questions/32590639
复制相似问题