Spring integration Spring集成-并行有序处理

Spring integration Spring集成-并行有序处理,spring-integration,Spring Integration,在我处理的应用程序中,有来自TCP套接字的连续消息流。消息有不同的类型。不同类型的消息应并行处理。但是,每种特定类型的消息都必须按照它们出现的顺序进行处理。 我使用了spring集成的Executor通道,它解决了并行处理的需要。我为每种特定类型的消息创建了一个通道。 但我不能保证对特定类型的消息进行有序处理 有没有一种方法可以在使用并行处理的同时,对发布/订阅通道进行有序处理?考虑使用相同的ExecutorChannel,但作为每种类型的输入。其中的诀窍是,它们中的每一个都应该配置具有单个线程

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


有没有一种方法可以在使用并行处理的同时,对发布/订阅通道进行有序处理?

考虑使用相同的
ExecutorChannel
,但作为每种类型的输入。其中的诀窍是,它们中的每一个都应该配置具有单个线程的执行器。因此,单线程执行器通道的数量与消息类型的数量相同

另一个技巧是为每种类型设置
QueueChannel
,并以
固定延迟
作为这些队列的订户轮询端点


由于当前的Spring Integration 5.0是
FluxMessageChannel
,所以还有一个选项可用。排序由内部反应器的
通量
保证,并行性将由订阅服务器实现-订阅服务器线程中发生
通量
中的处理消息。

因为执行器通道接受一个执行器作为构造函数参数,我如何才能强制它对每种不同的消息类型始终使用相同的线程?我应该分配maxpoolsize为1的线程池执行器吗?好吧,同样:您必须拥有与您拥有的消息类型一样多的单线程执行器通道。由于按类型路由到它的消息的一个执行器通道基于单线程执行器,这保证了它们的正确顺序。请参阅我的答案中的另一个可能选项。M-M-M。听起来像是一个单独的问题,米哈伊尔?当然可以:)