0

我正在尝试重用 a以使用与此IBM MQ 教程JMSContext中所示相同的上下文发送多条消息。

context = cf.createContext();
destination = context.createQueue(QUEUE_NAME);
producer = context.createProducer();

for (int i = 1; i <= 5000; i++) {
  try {
     TextMessage message = context.createTextMessage("Message " + i + ".\n");
     producer.send(destination, message);
  } catch (Exception ignore) {}
}
context.close();

假设连接在某个时候断开。上下文会自动恢复还是我需要再次重建上下文?


更新 -

这是当前连接工厂的构建方式:

JmsFactoryFactory ff = JmsFactoryFactory.getInstance(JmsConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();

cf.setStringProperty    (CommonConstants.WMQ_HOST_NAME, config.getHost());
cf.setIntProperty       (CommonConstants.WMQ_PORT, config.getPort());
cf.setStringProperty    (CommonConstants.WMQ_CHANNEL, config.getChannel());
cf.setIntProperty       (CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT);
cf.setStringProperty    (CommonConstants.WMQ_QUEUE_MANAGER, config.getQueueManager());
cf.setBooleanProperty   (JmsConstants.USER_AUTHENTICATION_MQCSP, false);
cf.setIntProperty       (JmsConstants.PRIORITY, 0);

return cf.createContext();

4

2 回答 2

0

您是否尝试过从JMSContext现有的创建?

JMSContext#createContext(int sessionMode)

它将创建新JMSContext的但重用相同的连接。

参考:

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.pro.doc/intro_jms_model.htm https://docs.oracle.com/javaee/7/api/javax /jms/JMSContext.html

于 2019-08-30T15:32:35.530 回答
0

重新连接的工作方式是这样的(另请参阅@JoshMc 的评论):

  1. 在客户端上,像这样设置重新连接选项:

    cf.setIntProperty(CommonConstants.WMQ_CLIENT_RECONNECT_OPTIONS, CommonConstants.WMQConstants.WMQ_CLIENT_RECONNECT);
    
  2. 在服务器上,像这样停止队列管理器:

    endmqm -r 
    
于 2019-08-30T07:41:42.303 回答