如果Destination已关闭,如何可靠地发送IBM MQ消息?

时间:2017-09-02 18:38:14

标签: jms ibm-mq

我必须向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代理之前重试某些定义的次数?

1 个答案:

答案 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已禁用等等。