【问题标题】:Spring Integration - Parallel ordered processingSpring Integration - 并行有序处理
【发布时间】:2017-11-06 22:39:15
【问题描述】:

在我处理的应用程序中,有来自 TCP 套接字的连续消息流。消息有不同的类型。应该并行处理不同类型的消息。但是每种特定类型的消息都必须按照它们进入的顺序进行处理。 我使用了 spring 集成中的 ExecutorChannel,它解决了并行处理需求。我为每种特定类型的消息创建了一个频道。 但我不能保证对特定类型的消息进行有序处理。

有没有办法在使用发布/订阅通道的同时使用并行处理进行有序处理?

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    考虑使用相同的ExecutorChannel,但作为每种类型的输入。他们每个人都应该配置有单个线程的执行程序的技巧。因此,单线程执行器通道与消息类型一样多。

    另一个技巧是QueueChannel 用于每种类型,并使用fixed-delay 作为这些队列的订阅者轮询端点。

    由于当前的 Spring Integration 5.0,还有一个可用的选项是FluxMessageChannel。排序由内部 Reactor 的 Flux 保证,并行性将由订阅者实现 - Flux 中的处理消息发生在订阅者线程中。

    【讨论】:

    • 由于 ExecutorChannel 接受 Executor 作为构造函数参数,我如何强制它始终使用相同的线程处理每种不同的消息类型?我应该分配 maxpoolsize 为 1 的线程池执行器吗?
    • 好吧,再说一遍:你必须拥有尽可能多的消息类型的单线程 ExecutorChannel。由于按类型路由到它的消息的一个执行器通道基于单线程执行器,这保证了它们的正确顺序
    • 另请参阅我的答案中的另一个可能选项。
    • M-m-m。听起来像是一个单独的 SO 问题,米哈伊尔?
    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    相关资源
    最近更新 更多