【发布时间】:2013-12-04 14:22:18
【问题描述】:
我正在使用 spring 集成通过 tcp 获取记录。有一组客户端 ID,被拆分为单独的客户端 ID 消息以获取相应的记录。到目前为止,这工作正常。 现在,为了提高性能,我需要将集合分解为子集合并使用子集合中的客户端 ID 来获取记录。 我已经实现了拆分器来破坏集合,但它只适用于一个线程。程序仅在服务第一个请求(即第一个客户端集合)后结束。
如何使用多线程实现场景?
【问题讨论】:
我正在使用 spring 集成通过 tcp 获取记录。有一组客户端 ID,被拆分为单独的客户端 ID 消息以获取相应的记录。到目前为止,这工作正常。 现在,为了提高性能,我需要将集合分解为子集合并使用子集合中的客户端 ID 来获取记录。 我已经实现了拆分器来破坏集合,但它只适用于一个线程。程序仅在服务第一个请求(即第一个客户端集合)后结束。
如何使用多线程实现场景?
【问题讨论】:
只需将分配器的输出通道设为an Executor one:
<int:channel id="executorChannel">
<int:dispatcher task-executor="someExecutor"/>
</int:channel>
【讨论】:
program end(或each thread exits)是什么意思吗?也许你只是运行一个单元测试?因此,您应该阻止主测试的线程以获得结果。实际上,我们使用一些PollableChannel 来等待单元测试的回复。如果你以main java 方法运行你的代码,你应该会得到很好的结果。你提到你分裂了好几次。所以,把 splitter 的所有输出通道都设为 ExecutorChannel。
System.exit(0) 杀死所有线程。其实我不明白这种应用的原因。通常,Spring 集成过程存在于 Tomcat 或 Spring XD 等容器中。不要忘记您可以从操作系统中终止您的主要 Java 进程。因此,将您的解决方案移至主应用程序即可。