提问者:小点点

jpos:如何将等待时间增加到40秒,以便处理延迟响应消息


这是另一个系统需要时间来发送响应的场景。在这种情况下,我希望jpos在超时之前等待40/45秒。

以下是严重的日志事件:

请求发送到jpos:

<log realm="channel/127.0.0.1:49142" at="2020-05-21T01:15:54.901" lifespan="1ms">

Jpos发送消息:

<log realm="channel/127.0.0.1:6269" a**t="2020-05-21T01:15:54.909"** lifespan="2ms">

但通道在20秒时中断,客户端请求的事务断开

<log realm="org.jpos.q2.iso.ChannelAdaptor" at="2020-05-21T01:16:19.593">
  <warn>
    channel-receiver-MIG_NT2_EP6-receive
    Read timeout / EOF - reconnecting
  </warn>
</log>

响应接收时间为

<log realm="channel/127.0.0.1:6269" at="2020-05-21T01:16:32.610" lifespan="37771ms">

我的频道如下

<?xml version="1.0" ?>

<channel-adaptor name='MIG_NT2_EP6-channel' class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">
    <channel class="org.jpos.iso.channel.NACChannel"
             packager="org.jpos.iso.packager.GenericPackager"
             logger="Q2"
             header="6000000000"
             >
         <property name="packager-config"  value="cfg/packager/AS280501.xml" debug="True" />

        <property name="host" value="127.0.0.1" />
        <property name="port" value="6336" />
        <property name="timeout" value="180000"/>
    </channel>
    <in>MIG_NT2_EP6-send</in>
    <out>MIG_NT2_EP6-receive</out>
    <reconnect-delay>10000</reconnect-delay>
</channel-adaptor>

我的mux

<?xml version="1.0" ?>

<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="MIG_NT2_EP6-AUTORESPONDER" debug="True">
    <in>MIG_NT2_EP6-receive</in>
    <out>MIG_NT2_EP6-send</out>
    <ready>MIG_NT2_EP6-channel.ready</ready>
</mux>

txn管理员

<txnmgr name="mpgs" class="org.jpos.transaction.TransactionManager" logger="Q2">
    <property name="queue" value="MIG_NT2_EP6-TXNMGR"/>
    <property name="sessions" value="2"/>
    <property name="max-sessions" value="128"/>
    <property name="debug" value="true"/>

    <participant class="org.jpos.transaction.participant.QueryHost"/>
    <participant class="org.jpos.transaction.participant.SendResponse"/>
</txnmgr>

服务器

<server class="org.jpos.q2.iso.QServer" logger="Q2" name="MIG_NT2_EP6-server-7336" realm="MIG_NT2_EP6-server-7336">
    <attr name="port" type="java.lang.Integer">7336</attr>
    <channel class="org.jpos.iso.channel.NACChannel"
             packager="org.jpos.iso.packager.GenericPackager"
             type="server"
             logger="Q2"
         header="6000000000"
             >
     <property name="packager-config"  value="cfg/packager/CISascii.xml" debug="True" />
        <property name="timeout" value="180000"/>
    </channel>
    <request-listener class="org.jpos.iso.IncomingListener" logger="Q2" realm="incoming-request-listener">
        <property name="queue"  value="MIG_NT2_EP6-TXNMGR" />
        <property name="ctx.DESTINATION"  value="MIG_NT2_EP6-AUTORESPONDER" />
    </request-listener>
</server>

如何将等待时间增加到40秒以处理迟到的消息

提前感谢


共1个答案

匿名用户

您收到的超时不是因为交易超时而是因为通道超时。

您的通道超时时间为180秒,即3分钟,因此如果连续3分钟内没有传入流量,独立于事务的开始,底层套接字将断开连接,这就是您在此处看到的:

<log realm="org.jpos.q2.iso.ChannelAdaptor" at="2020-05-21T01:16:19.593">
  <warn>
    channel-receiver-MIG_NT2_EP6-receive
    Read timeout / EOF - reconnecting
  </warn>
</log>

如果你没有回声交换,或者你正在测试,我会禁用超时到一个长数字或禁用它到0(只是为了测试,你不希望在prod中)你希望在prod中,但你需要通过以低于通道超时的间隔发送回声消息来确保流量。

所以简短的回答是,增加超时,其他涉及的超时是隐藏的,它是QueryHost中的超时,默认为30秒。

如果响应预计需要不到一分钟的时间才能到达,您可以在事务管理器中配置分钟超时,如下所示:

<txnmgr name="mpgs" class="org.jpos.transaction.TransactionManager" logger="Q2">
    <property name="queue" value="MIG_NT2_EP6-TXNMGR"/>
    <property name="sessions" value="2"/>
    <property name="max-sessions" value="128"/>
    <property name="debug" value="true"/>

    <participant class="org.jpos.transaction.participant.QueryHost">
        <property name="timeout" value="60000"/>
    </participant>
    <participant class="org.jpos.transaction.participant.SendResponse"/>
</txnmgr>