1

我正在将 Project Reactor 用于非阻塞 IO 数据管道,并且我正在考虑使用 Spring Integration 作为抽象层来管理管道中的所有流和组件。我目前正在使用 Project Reactor 实现 Kafka 消费者,我开始怀疑 Spring Integration 包装是否会在阻塞和背压方面损坏我的管道。

我想知道在完整的非阻塞应用程序中使用 Spring Integration 及其类是否被认为是安全的,以及是否有任何陷阱我应该注意。

4

1 回答 1

1

在大多数情况下,Spring Integration 组件是无状态的,因此它们在多线程(或非阻塞)环境中使用是安全的。如果您使用真正执行阻塞 IO 操作(例如文件写入或 JDBC INSERT)的特定通道适配器,您可能会遇到一些问题。在这种情况下,您需要考虑为此类操作切换到不同的线程,以免阻塞您的反应流。

请参阅 Project Reactor 中的相应配方:https ://projectreactor.io/docs/core/release/reference/#faq.wrap-blocking

为此,Spring Integration 提供了一个ExecutorChannelQueueChannel实现的线程切换目的。然而,这FluxMessageChannel在某些情况下非常适合。

有限的背压在 Spring Integration 解决方案中没有意义,因为一切都被视为流,无限的数据流。因此,在大多数情况下,Spring Integration 依赖于自然的背压,在我们处理当前之前我们不会请求更多。

请尝试一下,不要犹豫,给我们一些反馈!

于 2022-01-18T18:02:29.010 回答