Jms 如果目标关闭,如何可靠地发送IBM MQ消息?

Jms 如果目标关闭,如何可靠地发送IBM MQ消息?,jms,ibm-mq,Jms,Ibm Mq,我必须向IBM队列发送消息。我已经编写了一个普通的producer类来将消息推送到队列,如下所示:- Session session = queueConnection.createSession(true, QueueSession.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("test.queue"); Mess

我必须向IBM队列发送消息。我已经编写了一个普通的producer类来将消息推送到队列,如下所示:-

        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中存在的队列已关闭,或者IBM MQ broker已关闭,或者存在导致发送消息失败的网络问题


JMS/IBM MQ中是否有一种机制可以自动重试以发送消息?基本上是重试机制,并在最终放弃将消息发送到IBM MQ broker之前重试定义的次数

IBM MQ JMS客户端其他IBM MQ客户端也有一项功能,其中,如果IBM MQ队列管理器的连接因任何原因中断,客户端将尝试重新连接到队列管理器,直到指定的时间。请参见此处:。您需要配置连接工厂以启用重新连接

例如,如果在执行producer.send方法时与队列管理器的连接中断,IBM MQ JMS客户端将自动尝试重新连接到队列管理器并发送消息


在IBM MQ中,队列不能下降,但可以进入可访问状态,例如,如果队列已满或put/get on queue已禁用等。

感谢您指向链接。但我的用例是应用程序将在TOMEE容器中运行。如果由于某种原因队列不可用,应用程序是否在TOMEE内部运行?是否能够使用setClientReconnectOptions自动重新连接?是的,如果启用了重新连接选项且连接中断,MQ JMS客户端将尝试重新连接。