为什么QMUX.request()方法设计成强制传递超时参数?

问题描述 投票:0回答:2

我正在使用下面的配置连接到主机,它也有 timeout 属性。 现在我的问题是为什么我再次需要将 timeout 参数传递给

QMUX.request(msg, timeout)
? 我的理解是,
<property name="timeout" value="60000"/>
QMUX.request(msg,timeout)方法的
timeout
参数的目的相同。如果我错了,请纠正我。

 <channel-adaptor name="my-channel-adaptor"
                     class="org.jpos.q2.iso.ChannelAdaptor"
                     logger="Q2"
                     realm="my-channel-realm"
                     pool-size="50"
                     thread-pool-size="10">
      <channel class="org.jpos.iso.channel.ASCIIChannel"
               packager="org.jpos.iso.packager.GenericPackager">
        <property name="host" value="localhost"/>
        <property name="port" value="65000"/>
        <property name="timeout" value="60000"/>
        <property name="maxPacketLength" value="4096"/>
        <property name="header" value="600"/>
        <property name="lengthHeader" value="2"/>
        <property name="keepAlive" value="true"/>
      </channel>
    </channel-adaptor>
java iso8583 jpos
2个回答
0
投票

我的理解是,

<property name="timeout" value="60000"/>
timeout
参数的目的
QMUX.request(msg,timeout)
方法相同。

我不这么认为。

  • 前者导致

    setSOTimeout
    在每个
    Socket
    连接时被调用。根据 javadoc,设置
    SO_Timeout
    具有以下效果:

    启用/禁用

    SO_TIMEOUT
    指定超时,以毫秒为单位。将此选项设置为非零超时后,与此
    InputStream
    关联的
    Socket
    上的 read() 调用将仅阻塞这段时间。如果超时到期,则会引发
    java.net.SocketTimeoutException
    ,尽管
    Socket
    仍然有效。该选项必须在进入阻塞操作之前启用才能生效。
    timeout
    必须 > 0。零的
    timeout
    被解释为无限超时。

    换句话说,这是一个传输层超时。我没有研究当

    SocketTimeoutException
    被提出时会发生什么,但我想该频道将被标记为失败......以某种方式。

  • 后者是针对特定请求的超时。这是一个应用程序协议超时。当它发生时,看起来

    request(...)
    调用返回
    null
    。该频道将仍然存在。

    如果你传递零作为超时,则没有请求级别超时。

    request
    调用将无限期地等待响应。


为什么

QMUX.request()
方法设计成强制传递超时参数?

这是您需要询问

org.jpos
设计师的问题。


0
投票

请求方法的超时时间是它等待响应的时间。

通道的超时时间是在没有任何活动的情况下断开连接的时间。

它们是两个不同的东西,这就是为什么你需要在请求方法上指定一个。

如果不想等待响应,可以使用send方法。如果你想永远等待,你可以使用零超时,但不推荐这样做。

还有一件事,多路复用器没有对通道的引用,它通过队列与其通信,因此它不能以任何方式覆盖任何配置。

© www.soinside.com 2019 - 2024. All rights reserved.