jpos Gateway: невозможно отправить ответное сообщение, полученное от удаленного хоста, запрошенному клиенту

Я новичок в jpos. пытаюсь использовать jpos-2


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

3 из коробки. Я вижу сообщение, перенаправленное на удаленный хост, и ответ, но ответное сообщение не доставляется запрошенному клиенту. Получение следующей ошибки

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

будет здорово, если я получу помощь в решении этой проблемы. Заранее спасибо.


person Abrar Ahamed    schedule 22.02.2020    source источник
comment
Ответ не соответствует полю 11 запроса, поэтому мультиплексор не знает, что это ответ на этот запрос. Почему так происходит?   -  person Andrés Alcarraz    schedule 22.02.2020
comment
@AndrésAlcarraz спасибо, что решил проблему. Где я могу найти информацию о том, какие поля должны совпадать в ответе и как jpos сопоставляет запросы и ответы.   -  person Abrar Ahamed    schedule 24.02.2020
comment
jpos.org/doc/proguide-draft.pdf раздел 8.3.2   -  person Andrés Alcarraz    schedule 25.02.2020


Ответы (1)


Подводя итог в ответе на то, что было объяснено в комментариях, проблема заключалась в том, что поле 11 не соответствовало ответу. Из-за этого мультиплексор не знал, что входящее сообщение было ответом на запрос.

Вы можете увидеть поля по умолчанию, используемые для сопоставления ответов на запросы QMUX, и узнать, как настроить другой набор ключей, в руководство программиста jPOS раздел 8.3.2

person Andrés Alcarraz    schedule 24.02.2020