【问题标题】:multi threaded Splitter in spring integration弹簧集成中的多线程拆分器
【发布时间】:2013-12-04 14:22:18
【问题描述】:

我正在使用 spring 集成通过 tcp 获取记录。有一组客户端 ID,被拆分为单独的客户端 ID 消息以获取相应的记录。到目前为止,这工作正常。 现在,为了提高性能,我需要将集合分解为子集合并使用子集合中的客户端 ID 来获取记录。 我已经实现了拆分器来破坏集合,但它只适用于一个线程。程序仅在服务第一个请求(即第一个客户端集合)后结束。

如何使用多线程实现场景?

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    只需将分配器的输出通道设为an Executor one

    <int:channel id="executorChannel">
        <int:dispatcher task-executor="someExecutor"/>
    </int:channel>
    

    【讨论】:

    • 场景有点不同,请求消息经过拆分器通道被路由到2个不同的通道创建2个不同的消息然后传递给服务。我已经尝试在拆分器通道上使用任务执行器以及在路由通道上配置任务执行器,但是每个线程在处理第一条消息后退出。
    • 能解释一下program end(或each thread exits)是什么意思吗?也许你只是运行一个单元测试?因此,您应该阻止主测试的线程以获得结果。实际上,我们使用一些PollableChannel 来等待单元测试的回复。如果你以main java 方法运行你的代码,你应该会得到很好的结果。你提到你分裂了好几次。所以,把 splitter 的所有输出通道都设为 ExecutorChannel。
    • 请在下面找到配置和场景
    • 我在主类末尾使用 System.exit(0)。当我删除 System.exit(0) 时,所有线程都正常运行并且我得到了想要的结果,但是主程序永远不会停止,即主线程永远不会死。
    • 对。它不应该死,因为通过 taskExecutor 您启动其他线程并且管理返回到主线程并且您的 System.exit(0) 杀死所有线程。其实我不明白这种应用的原因。通常,Spring 集成过程存在于 Tomcat 或 Spring XD 等容器中。不要忘记您可以从操作系统中终止您的主要 Java 进程。因此,将您的解决方案移至主应用程序即可。
    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多