TCP 套接字的连接池和多线程?

Connection pooling and Multithreading for TCP Socket?

我有一个 java 应用程序(比如 A),它通过 TCP 套接字与应用程序(比如 B)通信。我的 java 应用程序是多线程的,最多可以处理 100 个线程。为了在 A --> B 之间通信,我们有 10 个套接字。

Challenges -

  1. Connection Pooling - need connection pooling mechanism to handle n(say 100) number of thread(of application A), communicating to application B via x(say 10) number of TCP Socket.

  2. Multithreading - How can two thread access same socket send the request one by one and get back the response mapped to appropriate thread.

  3. Multiple request - Is it possible that two thread can send the request on single socket simultaneously.

我们可以通过任何框架来克服这个挑战吗?可能吗? 我听说 Spring Integration/ApacheCamel/Local MQ 可以解决这个问题。任何例子。

与Spring集成:

  1. CachingClientConnectionFactory
  2. TcpOutboundGateway(含 CachingClientConnectionFactory)。
  3. Collaborating Outbound and Inbound Channel Adapters.

但是你必须自己request/reply协作(通常基于消息中的内容);回复可能不会按发送顺序返回。由于没有执行该协作的标准方法,因此框架本身不支持它。

我能够通过 jPOS 解决上述问题。

jPOS 可以进行多路复用。它使用 ISOMessage 字段 11 和 41 来匹配请求和响应。

jPOS 也提供池化机制。