jpos 网关:无法将从远程主机收到的响应消息发送回请求的客户端

jpos Gateway : Not able to send back the response message received from the remote host to the client requested

我是jpos的新手。尝试开箱即用 jpos-2_1_3。我可以看到转发到远程主机的消息和返回的响应,但是响应消息没有传送到请求的client.Getting下面的错误

[HOST_UNREACHABLE] o.j.t.p.QueryHost.expired:111 'mux.rsc' 不响应

我查看了客户端状态,连接中,等待响应 我的配置文件如下

50_server.xml


    <server class="org.jpos.q2.iso.QServer" logger="Q2" name="bnet-server-7003" realm="bnet-server-8000">
        <attr name="port" type="java.lang.Integer">6003</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/CISebcdic.xml" debug="True" />
            <property name="timeout" value="18000"/>
        </channel>
        <request-listener class="org.jpos.iso.IncomingListener" logger="Q2" realm="incoming-request-listener">
            <property name="space"   value="tspace:default" />
            <property name="queue"  value="RSCTXNMGR" />
            <property name="ctx.DESTINATION"  value="rsc" />
        </request-listener>
    </server>

10_channel.xml

<?xml version="1.0" ?>

<channel-adaptor name='rsc-channel' class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">
    <channel class="org.jpos.iso.channel.BCDChannel"
             packager="org.jpos.iso.packager.GenericPackager" header="6000000000" logger="Q2" >
         <property name="packager-config"  value="cfg/packager/CISascii.xml" debug="True" />
        <property name="host" value="127.0.0.1" />
        <property name="port" value="9000" />
        <property name="keep-alive" value="true" />
    </channel>
    <in>rscbnet-send</in>
    <out>rscbnet-receive</out>
    <reconnect-delay>10000</reconnect-delay>
</channel-adaptor>

20_mux.xml

<?xml version="1.0" ?>

<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="rsc">
    <in>rscbnet-receive</in>
    <out>rscbnet-send</out>
    <ready>rsc-channel.ready</ready>
    <key>41,11</key>
    <unhandled>rsc-channel-unhandled</unhandled>
</mux>

30_txnmgr.xml

<?xml version='1.0'?>
<txnmgr class="org.jpos.transaction.TransactionManager" logger="Q2">
    <property name="queue" value="RSCTXNMGR"/>
    <property name="sessions" value="10"/>
    <property name="max-sessions" value="128"/>
    <property name="debug" value="true"/>

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

在日志中,我可以看到消息已发送到远程主机并收到响应

<log realm="channel/127.0.0.1:9000" at="2020-02-22T17:11:39.114">
  <send>
    <isomsg direction="outgoing">
      <!-- org.jpos.iso.packager.GenericPackager[cfg/packager/CISascii.xml] -->
      <header>6000000000</header>
      <field id="0" value="0400"/>
      <field id="2" value="4113550001234586"/>
      <field id="3" value="003000"/>
      <field id="4" value="000000005000"/>
      <field id="7" value="0218135108"/>
      <field id="11" value="570164"/>
      <field id="12" value="005106"/>
      <field id="13" value="0219"/>
      <field id="14" value="1906"/>
      <field id="18" value="7399"/>
      <field id="22" value="812"/>
      <field id="32" value="001529"/>
      <field id="33" value="004601"/>
      <field id="37" value="702011961044"/>
      <field id="39" value="00"/>
      <field id="41" value="W1Q99999"/>
      <field id="42" value="25233065       "/>
      <field id="43" value="Apple NZ GCS           Sydney         AU"/>
      <field id="48" value="543432303730313033323130363331355649533237333634353032313920203230303153" type="binary"/>
      <field id="49" value="036"/>
      <field id="61" value="10251040066000362000"/>
      <field id="90" value="010057016402181351080000000152900000004601"/>
    </isomsg>
  </send>
</log>
<log realm="channel/127.0.0.1:9000" at="2020-02-22T17:11:39.115" lifespan="179071ms">
  <receive>
    <isomsg direction="incoming">
      <!-- org.jpos.iso.packager.GenericPackager[cfg/packager/CISascii.xml] -->
      <header>6000000000</header>
      <field id="0" value="0410"/>
      <field id="2" value="4113550001234586"/>
      <field id="3" value="003000"/>
      <field id="4" value="000000005000"/>
      <field id="7" value="0221223852"/>
      <field id="11" value="620156"/>
      <field id="12" value="093850"/>
      <field id="13" value="0222"/>
      <field id="14" value="1906"/>
      <field id="18" value="7399"/>
      <field id="22" value="812"/>
      <field id="32" value="001529"/>
      <field id="33" value="004601"/>
      <field id="37" value="702011079220"/>
      <field id="39" value="00"/>
      <field id="41" value="W1Q99999"/>
      <field id="42" value="25233065       "/>
      <field id="43" value="Apple NZ GCS           Sydney         AU"/>
      <field id="48" value="543432303730313033323130363331353030303030303030303030303020203230303153" type="binary"/>
      <field id="49" value="036"/>
      <field id="61" value="10251040066000362000"/>
      <field id="90" value="010062015602212238520000000152900000004601"/>
    </isomsg>
  </receive>
</log>
<log realm="org.jpos.transaction.TransactionManager" at="2020-02-22T17:12:09.115" lifespan="30001ms">
  <abort>
    txnmgr-9:idle:2
    <context>
      TIMESTAMP: Sat Feb 22 17:11:39 AEDT 2020
      SOURCE: org.jpos.iso.channel.NACChannel@795c411
      REQUEST:
       <isomsg direction="outgoing">
         <!-- org.jpos.iso.packager.GenericPackager[cfg/packager/CISascii.xml] -->
         <header>6000000000</header>
         <field id="0" value="0400"/>
         <field id="2" value="4113550001234586"/>
         <field id="3" value="003000"/>
         <field id="4" value="000000005000"/>
         <field id="7" value="0218135108"/>
         <field id="11" value="570164"/>
         <field id="12" value="005106"/>
         <field id="13" value="0219"/>
         <field id="14" value="1906"/>
         <field id="18" value="7399"/>
         <field id="22" value="812"/>
         <field id="32" value="001529"/>
         <field id="33" value="004601"/>
         <field id="37" value="702011961044"/>
         <field id="39" value="00"/>
         <field id="41" value="W1Q99999"/>
         <field id="42" value="25233065       "/>
         <field id="43" value="Apple NZ GCS           Sydney         AU"/>
         <field id="48" value="543432303730313033323130363331355649533237333634353032313920203230303153" type="binary"/>
         <field id="49" value="036"/>
         <field id="61" value="10251040066000362000"/>
         <field id="90" value="010057016402181351080000000152900000004601"/>
       </isomsg>

      DESTINATION: rsc
      **RESULT:
       <result>
         <fail>
           [HOST_UNREACHABLE] o.j.t.p.QueryHost.expired:111 'mux.rsc' does not respond
         </fail>
       </result>**

      :paused_transaction:
       id: 2

    </context>
            prepare: o.j.t.p.QueryHost PREPARED PAUSE READONLY NO_JOIN
            prepare: o.j.t.p.SendResponse ABORTED READONLY NO_JOIN
     in-transit=0, head=3, tail=3, paused=0, outstanding=0, active-sessions=10/128, tps=0, peak=1, avg=0.00, elapsed=30001ms
    <profiler>
      prepare: o.j.t.p.QueryHost [0.3/0.3]
      resume [30000.5/30000.8]
      prepare: o.j.t.p.SendResponse [0.1/30001.0]
      end [1.1/30002.2]
    </profiler>
  </abort>
</log>
<log realm="Q2.system" at="2020-02-22T17:12:43.242">

如果我能提前得到一些帮助来解决这个问题就更好了issue.thanks。

总结一下评论中解释的答案,问题是字段 11 与响应不匹配。因此,多路复用器不知道传入消息是对请求的响应。

您可以查看用于匹配 QMUX 请求响应的默认字段,并在 jPOS programmers guide 第 8.3.2 节

中了解如何配置一组不同的键