客户端模式="真"和客户端连接工厂

时间:2018-06-10 09:19:13

标签: spring-boot spring-integration spring-integration-dsl

spring Documentation --> 32.6 TCP Adapters中提到我们使用clientMode =" true"然后入站适配器负责与外部服务器的连接。

我创建了一个流程,其中带有客户端连接工厂的TCP适配器与外部服务器建立连接,该流程的代码为:

IntegrationFlow flow = IntegrationFlows.from(Tcp.inboundAdapter(Tcp.nioClient(hostConnection.getIpAddress(),Integer.parseInt(hostConnection.getPort()))
             .serializer(customSerializer)
             .deserializer(customSerializer)
             .id(hostConnection.getConnectionNumber())).clientMode(true).retryInterval(1000).errorChannel("testChannel").id(hostConnection.getConnectionNumber()+"adapter"))
             .enrichHeaders(f->f.header("CustomerCode",hostConnection.getConnectionNumber()))
             .channel(directChannel())
             .handle(Jms.outboundAdapter(ConnectionFactory())
             .destination(hostConnection.getConnectionNumber()))
             .get();

     theFlow = this.flowContext.registration(flow).id(hostConnection.getConnectionNumber()+"outflow").register(); 
  • 我通过迭代连接列表创建了多个流 在for循环中迭代上面的代码,并在具有唯一ID的flowcontext中注册它们。

My clients are created successfully with no issue and then establish there connection as supported by topology

问题

  • 我已经计算了成功创建的客户端连接数,因此我已经计算了7个客户端连接(7个集成流程)成功完成并且他们自己发起了连接。

  • 当我创建第8个客户端连接时(第8个流创建并注册成功)但.clientMode(true)不起作用意味着客户端在第一次失败后不会自动启动连接意味着它尝试第一个如果成功连接则需要时间连接然后没有问题但是如果失败则不再重试。

  • 我的其他创建的客户端,即成功创建的7个客户端连接,当它们断开连接时,它们也停止从自身启动连接。

注意:流程只有TCP适配器停止启动连接没有问题

  • 流程已成功创建并注册,因为没有问题,因为当我运行控制总线命令@adapter_id.retryConnection()时,它已与服务器连接。

我不明白我的流程有什么问题,在特定的计数之后我无法启动连接,即七,或者在创建客户端数量方面存在限制。

1 个答案:

答案 0 :(得分:0)

一种可能性是taskScheduler的线程池已经耗尽 - 这不应该发生在上面的配置中,但它取决于应用程序中的其他内容。进行线程转储(例如jstack)以查看taskScheduler线程正在做什么。

有关如何在调度程序中配置线程的信息,请参阅the documentation。但是,如果它解决了这个问题,你应该确定使用调度程序线程执行长任务的任务。

同时打开DEBUG记录以查看它是否提供任何线索。