【发布时间】:2017-03-31 10:03:33
【问题描述】:
我有一个 java 应用程序(比如 A),它通过 TCP 套接字与应用程序(比如 B)通信。我的 java 应用程序是多线程的,最多可以处理 100 个线程。为了在 A --> B 之间进行通信,我们有 10 个套接字。
挑战 -
连接池 - 需要连接池机制来处理(例如 100)个线程(应用程序 A),与 应用程序 B 通过 x(比如 10) 个 TCP 套接字。
多线程 - 两个线程如何访问同一个套接字,一一发送请求并取回映射到适当的响应 线程。
多个请求 - 两个线程是否可以在单个套接字上同时发送请求。
我们可以通过任何框架来克服这个挑战吗?是否可以? 听说 Spring Integration/ApacheCamel/Local MQ 可以解决这个问题。任何例子。
【问题讨论】:
-
我不知道你为什么把它标记为jpos,假设你正在尝试发送ISOMsg,你需要使用的组件是MuxPool、QMUX和ChannelAdaptor。 1. 如果是这种情况,我不明白为什么需要对同一个应用程序进行连接池,但是可以通过 N 个 CannelAdaptors 指向同一个 B 应用程序、N 个 QMuxes 和 1 个 MuxPool 来实现。 2. Mux 将知道如何将回复与请求匹配,您不必担心并发性。 3. 有可能,但是您必须确保消息是原子写入的,否则您的消息可能会被打乱。
-
@AndrésAlcarraz 是的,我们正在通过 ISOMsg 进行通信。我尝试使用 jPOS 库,我能够实现第 1 点和第 2 点。
-
嗨@mayank,所以对于第 3 点 MUX 和 ISOChannel 为您进行同步,如果您通过 mux.request 方法或通道访问它们,您不必担心并发性。发送方法。但是,如果您通过通道适配器的队列进行通信,则通道会更好。
-
@AndrésAlcarraz 谢谢。我试图通过 maven 在我的项目中包含最新的 jPOS 库,它是 2.0.8 版,但由于存储库中没有其他依赖 jar 版本而失败。它在下面寻找。但是在存储库中它不可用。
jPOS : repo.maven.apache.org/maven2/org/jpos/jpos je : repo.maven.apache.org/maven2/com/sleepycat/jecom.sleepycat je 7.0.6 compile -
你需要添加 oracle maven repo 指定版本的 sleepycat 是:
oracleReleases Oracle Released Java Packages download.oracle.com/maven</url> 默认
标签: java apache-camel spring-integration mq jpos