我使用jpos创建和解析ISO8583消息。我也在我的应用程序中使用线程池来同时创建n个ISO8583请求。我正在使用NACChannel将请求从客户端发送到服务器。服务器配置为处理30个不同的会话,每个会话的队列大小为20。 因此,从我的客户端应用程序,我同时发送许多ISO8583请求,但在服务器端,在单个会话上以顺序方式处理相同的请求。所以我的问题是
1)我如何发送请求以便使用jpos利用所有30个会话?
2)是否有其他方法可以在不同的会话中将此请求发送到服务器,以便服务器不会在单个通道中按顺序处理它?</ p>
我正在使用以下内容创建频道:
NACChannel channel = new NACChannel(host,portnumber,packager,"xxxxyyyyzzzz".getBytes());
我也有同样的q2实现。在q2实现中,我能够异步处理请求响应,但是也使用单个会话。让我知道是否需要共享更多相同的代码。
答案 0 :(得分:1)
使用MUX(如QMUX)。
MUX将允许您通过同一频道发送多条消息,并且可以正确匹配响应。
以jPOS-EE项目(http://jpos.org/doc/jPOS-EE.pdf)中的客户端模拟器为例。
答案 1 :(得分:0)
因此,如果我是客户端,我会配置与您想要服务器的连接数一样多的通道部署文件。 每个通道都有一个与之关联的多路复用器。在jpos muxpool deploy中包装所有这些多路复用器。这将作为一个巨大的多路复用器,可以循环选择多路复用器,从而选择通道。使用多路复用器发送请求(与使用多路复用器完全相同)。这样就可以利用所有连接,如果没有连接任何连接,则池足够智能,可以使用下一个连接的可用多路复用器。
e.g。 假设服务器正在侦听端口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并触发请求。它使用池中配置的多路复用器以循环方式触发请求。
当它的连接数量很少时,这种方法很有效,随着数量的增加,您可能需要以编程方式考虑创建这些通道和多路复用器。