Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TCP套接字的连接池和多线程?_Java_Apache Camel_Spring Integration_Mq_Jpos - Fatal编程技术网

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

Java TCP套接字的连接池和多线程?,java,apache-camel,spring-integration,mq,jpos,Java,Apache Camel,Spring Integration,Mq,Jpos,我有一个java应用程序(比如a),它通过TCP套接字与应用程序(比如B)通信。我的java应用程序是多线程的,最多可以处理100个线程。要在-->B之间通信,我们有10个套接字 挑战- 连接池-需要连接池机制来处理n(比如100)个线程(应用程序A),与 应用程序B通过x(比如10)个TCP套接字 多线程-两个线程如何访问同一个套接字,一个接一个地发送请求,并返回映射到相应套接字的响应 线 多个请求-两个线程是否可以在单个套接字上同时发送请求 我们能否通过任何框架克服这一挑战?可能吗?

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

挑战-

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

  • 多线程-两个线程如何访问同一个套接字,一个接一个地发送请求,并返回映射到相应套接字的响应 线

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

  • 我们能否通过任何框架克服这一挑战?可能吗?
    我听说Spring集成/ApacheCamel/Local MQ可以解决这个问题。任何示例。

    与Spring集成:

  • CachingClientConnectionFactory
  • TcpOutboundGateway
    (使用
    CachingClientConnectionFactory

  • 但您必须进行自己的请求/回复协作(通常基于消息中的某些内容);回复可能不会按发送顺序返回。由于没有标准的方式来执行协作,框架本身不支持协作。

    使用Spring集成:

  • CachingClientConnectionFactory
  • TcpOutboundGateway
    (使用
    CachingClientConnectionFactory

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

    我能够通过JPO解决问题

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


    JPO还提供了池机制。

    我能够通过JPO解决上述问题

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


    JPO还提供池机制。

    我不知道为什么您将其标记为JPO,假设您正在尝试发送ISOMsg,您需要使用的组件是MuxPool、QMUX和ChannelAdapter。1.如果是这种情况,我不明白为什么需要连接池到同一个应用程序,但这可以通过N个CannelAdapter指向同一个B应用程序、N个QMuxes和1个MuxPool来实现。2.Mux将是一个知道如何匹配回复和请求的设备,您不必担心并发性。3.这是可能的,但是您必须确保消息以原子方式写入,否则您的消息可能会被置乱。@AndrésAlcarraz是的,我们通过ISOMsg进行通信。我尝试使用jPOS库,我能够实现第1点和第2点。Hi@mayank,因此对于第3点MUX和ISOChannel,为您进行同步,如果您通过MUX.request方法或通道访问它们,您不必担心并发性。发送方法。但是关于频道,如果你通过频道适配器的队列进行沟通会更好。@AndrésAlcarraz,谢谢。我试图通过maven将最新的jPOS库包括在我的项目中,maven版本是2.0.8,但由于存储库中没有其他依赖的jar版本,所以失败了。它在下面寻找。但在存储库中它不可用。com.sleepycat je:您需要添加oracle maven repo,其中指定的sleepycat版本为:oracleleases oracle发布的Java软件包下载。oracle.com/maven default我不知道您为什么将其标记为JPO,假设您正在尝试发送ISOMsg,您需要使用的组件是MuxPool、QMUX和channeladapter。1.如果是这种情况,我不明白为什么需要连接池到同一个应用程序,但这可以通过N个CannelAdapter指向同一个B应用程序、N个QMuxes和1个MuxPool来实现。2.Mux将是一个知道如何匹配回复和请求的设备,您不必担心并发性。3.这是可能的,但是您必须确保消息以原子方式写入,否则您的消息可能会被置乱。@AndrésAlcarraz是的,我们通过ISOMsg进行通信。我尝试使用jPOS库,我能够实现第1点和第2点。Hi@mayank,因此对于第3点MUX和ISOChannel,为您进行同步,如果您通过MUX.request方法或通道访问它们,您不必担心并发性。发送方法。但是关于频道,如果你通过频道适配器的队列进行沟通会更好。@AndrésAlcarraz,谢谢。我试图通过maven将最新的jPOS库包括在我的项目中,maven版本是2.0.8,但由于存储库中没有其他依赖的jar版本,所以失败了。它在下面寻找。但在存储库中它不可用。com.sleepycat je:您需要添加oracle maven repo,其中指定的sleepycat版本为:oracleleases oracle发布的Java软件包下载。oracle.com/maven default