【发布时间】:2017-11-06 22:39:15
【问题描述】:
在我处理的应用程序中,有来自 TCP 套接字的连续消息流。消息有不同的类型。应该并行处理不同类型的消息。但是每种特定类型的消息都必须按照它们进入的顺序进行处理。 我使用了 spring 集成中的 ExecutorChannel,它解决了并行处理需求。我为每种特定类型的消息创建了一个频道。 但我不能保证对特定类型的消息进行有序处理。
有没有办法在使用发布/订阅通道的同时使用并行处理进行有序处理?
【问题讨论】:
在我处理的应用程序中,有来自 TCP 套接字的连续消息流。消息有不同的类型。应该并行处理不同类型的消息。但是每种特定类型的消息都必须按照它们进入的顺序进行处理。 我使用了 spring 集成中的 ExecutorChannel,它解决了并行处理需求。我为每种特定类型的消息创建了一个频道。 但我不能保证对特定类型的消息进行有序处理。
有没有办法在使用发布/订阅通道的同时使用并行处理进行有序处理?
【问题讨论】:
考虑使用相同的ExecutorChannel,但作为每种类型的输入。他们每个人都应该配置有单个线程的执行程序的技巧。因此,单线程执行器通道与消息类型一样多。
另一个技巧是QueueChannel 用于每种类型,并使用fixed-delay 作为这些队列的订阅者轮询端点。
由于当前的 Spring Integration 5.0,还有一个可用的选项是FluxMessageChannel。排序由内部 Reactor 的 Flux 保证,并行性将由订阅者实现 - Flux 中的处理消息发生在订阅者线程中。
【讨论】: