设置 IBM MQ 超时

Eug*_* To 3 java ibm-mq

当我打电话时com.ibm.mq.MQQueue#put(MQMessage,MQPutMessageOptions)它可能会挂起。如何为该方法设置超时?同样的问题是针对com.ibm.mq.MQQueue#get(MQMessage,MQGetMessageOptions)

Sha*_*shi 5

有 MQGMO_WAIT 选项和 WaitInterval,可以设置使 Get 调用等待一定的时间。例如,以下代码片段使 Get 调用等待 3 秒。

        MQGetMessageOptions gmo = new MQGetMessageOptions();
        gmo.Options = MQConstants.MQGMO_WAIT;
        gmo.WaitInterval = 3000;

        mqQueue.Get(mqMessage, gmo);
Run Code Online (Sandbox Code Playgroud)

但没有为 Put 调用设置超时的选项。如果存在任何问题,Put 调用将返回错误。

更新:

当调用 Put 调用时,已建立与队列管理器的连接。如果连接出现任何问题,Put 调用会在 TCP 堆栈通知此类问题后立即返回。由于此类 TCP 级别问题会影响系统上运行的所有应用程序,因此我认为,必须在系统级别而不是每个应用程序级别进行调整。另外,我认为不可能为 socket.write 调用设置超时。

不过,MQ 确实提供了一种设置超时的方法来建立与队列管理器的连接。mqclient.ini中有connection_timeout参数可以设置超时。