这是另一个系统需要时间来发送响应的场景。在这种情况下,我希望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秒以处理迟到的消息
提前感谢
您收到的超时不是因为交易超时而是因为通道超时。
您的通道超时时间为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>