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

最佳答案

在MQv7.0或更高版本中,使用SHARECNV为1或更高版本的SVRCONN通道,您可以缩短网络导致PUT返回错误所花费的时间,该时间用于Java的IBM MQ类或用于JMS的IBM MQ类。通过将SVRCONN的HBINT设置为较低的值来解决此问题。超时基于HBINT,使用以下公式:

  • 如果HBINT小于60:HBINT * 2
  • 如果HBINT大于或等于60:HBINT + 60

  • SVRCONN通道上的默认HBINT为300秒,因此最终会导致六分钟的超时。我喜欢将此值设置为较低的值,例如15,这会使您有30秒的超时时间。

    当以编程方式或通过JNDI指定连接详细信息时,用于Java的IBM MQ类和用于JMS的IBM MQ类采用在队列管理器的SVRCONN通道上设置的HBINT。

    如果您指向通道表Java / JMS,则将使用通道表的CLNTCONN HBINT来,最终的HBINT将是CLNTCONN和SVRCONN之间的最大值。例如,如果将CLNTCONN通道设置为15并将SVRCONN设置为默认值300,则最终HBINT将为300。

    09-30 09:44