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



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

以下是日志事件的严重性:

请求发送到日本特许厅:

<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>

我的复用器

<?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>

最新更新