0

我正在使用 jpos 创建和解析 ISO8583 消息。我也在我的应用程序中使用线程池来同时创建 n 个 ISO8583 请求。我正在使用 NACChannel 将请求从客户端发送到服务器。服务器配置为处理 30 个不同的会话,每个会话的队列大小为 20。因此,我的客户端应用程序同时发送许多 ISO8583 请求,但在服务器端,这些请求在单个会话上以顺序方式处理。所以我的问题是

1)我如何发送请求,以便使用 jpos 来利用所有 30 个会话?

2)有没有其他方法可以在不同的会话中将此请求发送到服务器,以便服务器不会在单个通道中按顺序处理相同的请求?

我正在使用以下内容创建频道:

NACChannel channel = new NACChannel(host,portnumber,packager,"xxxxyyyyzzzz".getBytes());

我也有相同的 q2 实现。在 q2 实现中,我能够异步处理请求响应,但这也是使用单个会话。如果我需要为此共享更多代码,请告诉我。

4

2 回答 2

1

使用 MUX(如 QMUX)。

MUX 将允许您通过同一通道发送多条消息,并将正确匹配响应。

以 jPOS-EE 项目 ( http://jpos.org/doc/jPOS-EE.pdf ) 中的客户端模拟器为例。

确保您阅读http://jpos.org/doc/proguide-draft.pdf

于 2016-02-24T19:32:35.340 回答
0

因此,如果我是客户,我会配置与服务器连接数一样多的通道部署文件。每个通道都有一个与之关联的多路复用器。将所有这些多路复用器包装在 jpos muxpool 部署中。这将充当单个巨大的多路复用器,对多路复用器和通道进行循环选择。使用 muxpool 发送请求(与使用 mux 完全相同)。这样,您的所有连接都会被利用,如果您的任何连接未连接,则池足够智能,可以使用已连接的下一个可用多路复用器。

例如说服务器正在侦听端口 9000 并允许 2 个连接。

我将按如下方式创建 2 个通道适配器,它们都指向主机和端口 9000。请查看每个适配器如何具有输入/输出元素。

<?xml version="1.0" ?>
<channel-adaptor name='HostConnection-1' 
    class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">
 <channel class=" org.jpos.iso.channel.NACChannel" logger="Q2" realm="channel-1"
       packager="org.jpos.iso.packager.GenericPackager">       
  <property name="packager-config" value="cfg/host-packager.xml" />
  <property name="host" value='127.0.0.1' />
  <property name="port" value="9000" />
  <property name="timeout" value="1000000" />
  <property name="keep-alive" value="true" />  
</channel>
 <in>host1-send</in>
 <out>host-receive</out>
 <reconnect-delay>10000</reconnect-delay>

<channel-adaptor name='HostConnection-2' 
    class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">
 <channel class=" org.jpos.iso.channel.NACChannel" logger="Q2" realm="channel-2"
       packager="org.jpos.iso.packager.GenericPackager">       
  <property name="packager-config" value="cfg/host-packager.xml" />
  <property name="host" value='127.0.0.1' />
  <property name="port" value="9000" />
  <property name="timeout" value="1000000" />
  <property name="keep-alive" value="true" />  
</channel>
 <in>host2-send</in>
 <out>host2-receive</out>
 <reconnect-delay>10000</reconnect-delay>
</channel-adaptor>

现在创建 2 个多路复用器。多路复用器将通道输入/输出连接到其输入/输出

<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="host-mux-1">
 <in>host1-receive</in>
 <out>host11-send</out>
 <ready>HostConnection-1.ready</ready> <!-- needs to be adaptor name + .ready-->
 <unhandled>host-unhandled</unhandled>

<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="host-mux-2">
 <in>host2-receive</in>
 <out>host12-send</out>
 <ready>HostConnection-2.ready</ready> <!-- needs to be adaptor name + .ready-->
 <unhandled>host-unhandled</unhandled>
</mux>

现在创建一个 muxpool 部署文件。

<mux class="org.jpos.q2.iso.MUXPool" logger="Q2" name="host-mux">
 <muxes>host-mux-1 host-mux-1</muxes>
 <strategy>round-robin</strategy>
</mux>

从 jpos 的 nameregistrar 实例中按名称获取 muxpool 并触发请求。它使用池中配置的多路复用器以循环方式触发请求。

当它的连接数量很少时,这很有效,随着数量的增长,您可能希望以编程方式考虑创建这些通道和多路复用器。

于 2016-08-18T03:17:51.743 回答