我必须向IBM队列发送消息。我编写了一个普通的生成器类来将消息推送到队列: -
Session session = queueConnection.createSession(true,
QueueSession.AUTO_ACKNOWLEDGE);
Destination destination =
session.createQueue("test.queue");
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("test");
producer.send(message);
// Close the session
session.close();
现在,假设由于某种原因,QueueManager中存在的Queue已关闭或IBM MQ代理已关闭或存在导致发送消息失败的网络问题。
JMS / IBM MQ中是否有一种机制可以自动重试以发送消息(基本上是重试机制)并在最终放弃将消息发送给IBM MQ代理之前重试某些定义的次数?
答案 0 :(得分:1)
IBM MQ JMS客户端(也包括其他IBM MQ客户端)具有以下功能:如果连接IBM MQ队列管理器因任何原因而中断,则客户端会尝试重新连接到队列管理器,直到指定的时间。见这里:https://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q032520_.htm。您需要配置连接工厂以启用重新连接。
例如,如果在执行producer.send
方法时连接到队列管理器中断,则IBM MQ JMS客户端会自动尝试重新连接到队列管理器并发送消息。
在IBM MQ中,队列不能关闭,但它可以变为无法访问,例如,如果队列已满或put / get on queue已禁用等等。