jms - 如何减少 WAS 8.0.0.10 中队列连接工厂的超时值(默认为 2-3 分钟)?

标签 jms ibm-mq

我是一名 Java 开发人员。为了连接到 IBM MQ,我在 WAS 8.0.0.10 中创建了队列连接工厂和队列。我想测试超时场景,因此我特意关闭了 IBM MQ。大约用了 2-3 分钟就得到了预期的超时结果。我想减少超时的值,但是,我在那里找不到任何配置。

我可以知道是否可以配置超时值吗?因为我尝试了几乎所有的超时配置,但都没有帮助。谢谢。

最佳答案

这取决于您尝试配置的超时。

可以通过将 Connect_Timeout 值设置为您希望连接等待初始 TCP 连接的秒数来配置初始连接的 TCP 连接超时。例如,如果服务器关闭或与服务器的网络连接关闭,这将适用。如果服务器已启动并可通过网络访问,并且只有 MQ 监听器(或所有 MQ)关闭,则服务器对 MQ 监听器端口连接的响应将是立即的“连接被拒绝”,您永远不会点击TCP 连接超时。

您可以通过多种方式设置Connect_Timeout,其中两种是:

  1. TCP 节中的 mqclient.ini 文件(参见 Location of the client configuration file),例如:

     TCP:
         Connect_Timeout=30
    
  2. 传递一个等价于上面的java系统属性,例如:

     -Dcom.ibm.mq.cfg.TCP.Connect_Timeout=30
    

如果您正在寻找如何设置与 MQ 的现有连接的超时,则需要注意以下几点:

IBM MQ 客户端/队列管理器默认情况下会在 channel 空闲时发送心跳消息。 SVRCONN channel 的 HBINT 将定义发送心跳消息的时间间隔(以秒为单位),如果没有其他流量通过 JMS MQ 客户端的 channel 。

正常情况下,客户端应该始终启动 HB,队列管理器将响应。如果队列管理器在 HBINT+5 秒内未收到 HB 请求,它将向客户端启动 HB 并期待响应。

对于小于 60 秒的 HBINT,超时基于 2*HBINT,对于 HBINT,超时基于 HBINT + 60 超过 60 秒。 SVRCONN 上的默认 HBINT 是 300,因此 MQ 连接到具有默认 HBINT 的 channel 的超时将为 360 秒。你提到 2 - 3 分钟,我怀疑如果你在 watch 上计时,它会是 6 分钟。

如果您想将超时设置为 30 秒,那么您可以将 SVRCONN channel HBINT 更改为 15 秒,例如:

ALTER CHL(CHL.NAME) CHLTYPE(SVRCONN) HBINT(15)

请注意,该值仅在您下次与 channel 建立客户端连接时生效,它不会影响已运行 channel 的 HBINT。

另外请注意,当连接到 MQ 队列管理器 v6 或更早版本时,客户端 HB 消息仅在客户端处于 GET with WAIT 操作时发送,其他时间不发送。

关于jms - 如何减少 WAS 8.0.0.10 中队列连接工厂的超时值(默认为 2-3 分钟)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48545556/

相关文章:

java - 如何在 Tomcat 中配置 JMS 连接和 JMS session 池

使用 WebSphere MQ File Transfer Edition (MQ FTE) 传输多个文件的 Ant 脚本

java - WebSphere Application Server v 7.0 是否与 MQ v 6.0.2.8 兼容?

ibm-mq - IBM 铸铁 : MQ Put activity issues

jms - JMSType的作用是什么?

java - Glassfish V3.x 和远程独立客户端

java - 从主题开头接收消息

java - ClassNotFoundException : com. ibm.mq.jms.MQConnectionFactory(Websphere MQ 7.5 + spring jms + maven tomcat 7 插件)

java - .replyToQueueManagerName 和 replyToQueueName 在不同的 MqEnvironment 上

grails - Grails JMS插件-无法解析类