【问题标题】:Connection pooling and Multithreading for TCP Socket?TCP Socket的连接池和多线程?
【发布时间】:2017-03-31 10:03:33
【问题描述】:

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

挑战 -

  1. 连接池 - 需要连接池机制来处理(例如 100)个线程(应用程序 A),与 应用程序 B 通过 x(比如 10) 个 TCP 套接字。

  2. 多线程 - 两个线程如何访问同一个套接字,一一发送请求并取回映射到适当的响应 线程。

  3. 多个请求 - 两个线程是否可以在单个套接字上同时发送请求。

我们可以通过任何框架来克服这个挑战吗?是否可以? 听说 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 版本而失败。它在下面寻找。但是在存储库中它不可用。 com.sleepycatje7​​.0.6compile jPOS : repo.maven.apache.org/maven2/org/jpos/jpos je : repo.maven.apache.org/maven2/com/sleepycat/je
  • 你需要添加 oracle maven repo 指定版本的 sleepycat 是: oracleReleasesOracle Released Java Packagesdownload.oracle.com/maven</url> 默认

标签: java apache-camel spring-integration mq jpos


【解决方案1】:

使用 Spring 集成:

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

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

【讨论】:

    【解决方案2】:

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

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

    jPOS 也提供池化机制。

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 2019-07-07
      • 2018-08-13
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      相关资源
      最近更新 更多