Spring Dataflow 概念澄清

标签 spring spring-cloud-dataflow

我开始使用 Spring Dataflow,我发现自己遇到了一些无法回答的问题,阅读了文档并做了一些测试。欢迎任何澄清(如果您不能一次回答所有问题,请回答您可以回答的问题,如果需要,我会合并完整的答案)

  1. Spring Dataflow 旨在编写应用程序工作流,例如:app A 的输出是 app B 的输入,依此类推。工作流不需要是线性的,因为app A 的输出可能是app Bapp C 的输入。 准确吗

  2. 流管道中的应用程序以“消息驱动”的方式进行通信,这写得很好。 App A 向代理发送消息(例如 RabbitMQ 或 Kafka),app B 使用其中的消息。我们的流程中可以有多个不同的经纪人。但消息传递是在应用程序之间发送信息的唯一方式吗? 例如,应用程序 A 是否有可能通过 HTTP REST 请求调用应用程序 B?如果是这样,怎么办?

  3. 由于应用程序依赖于异步消息传递(请参见上面的问题),因此数据流的附加值(value)是什么?我的意思是,如果您将 app A 配置为将消息发送到 foo 主题,并配置 app B 来使用来自同一主题的消息,那么您可以单独部署两者(没有数据流),并且它会起作用。据我了解,Dataflow仅提供了一种一次性部署和取消部署它们的方法,而不是一个一个地部署和取消部署它们。 正确吗?

  4. 与上一个问题一样,异步消息传递使您无需定义流程顺序(即您可以在 app A 之前启动 app B)。整个系统只有在两个应用程序都启动时才能工作,但它们甚至不需要互相了解。唯一需要的是他们使用相同的代理和主题,一个用于发送消息,另一个用于获取消息。那么,为什么在 Spring Cloud Dataflow 中绝对需要将一个应用程序的输出链接到另一个应用程序的输入呢?这是强制两个应用程序使用相同主题的方法,但这就是全部吗?

最佳答案

Spring Dataflow is meant to write applicative workflows

Spring Cloud Data Flow (SCDF) 是一种编排服务,可让您将微服务应用程序组成一个连贯的管道。今天接受的应用程序基于 Spring Cloud Stream (SCSt) 或 Spring Cloud Task (SCT) 编程模型,因此您可以分别编排流式传输和任务/批处理管道。根据要求,您可以实现线性或复杂的 DAG 类型工作流程。

But is the messaging the only way to send information between applications ?

现在,是的。 SCSt 提供的当前绑定(bind)器抽象支持消息传递 channel ,我们正在推广绑定(bind)模型。下一代正在演进,同时添加对 KStream 作为输入/输出以及 Reactor 的 Flux 作为输入/输出的支持。我们尚不支持 RESTful 绑定(bind)机制。

Since applications rely on asynchronous messaging (see above question), what is the Dataflow's added value ?

您可以编排单独的 SCSt/SCT 应用程序。独立应用程序包括“绑定(bind)器连接信息”、“ channel 绑定(bind)目标”等属性 - 您需要提供它们。一旦您有分区和缩放等要求,您就必须记录更多这些应用程序属性。这就是 SCDF 的编排层增加值(value)的地方。除了可用于更快地创建流/批处理管道的 DSL、REST-API、Dashboard/Flo 之外,SCDF 还可以自动创建这些已知属性,以使用定义明确的命名约定连接应用程序。

Dataflow only provides a way to deploy and undeploy them all at once, rather than one by one. Is that correct ?

如果您部署带有一组应用程序的流,SCDF 会按顺序部署它们。您可以取消部署、销毁和查询由应用程序组成的流的聚合状态。并且,对于任务,您可以启动、销毁和查询执行状态等。

why do you absolutely need to link one application's output to another one's input, in Spring Cloud Dataflow ?

这个不清楚。对于流处理,您在 SCDF 上下文中至少需要 2 个应用(源和接收器)。但是,您可以构建 aggregate application使用 SCSt 并将聚合(源、处理器(s)和接收器)编排为一个单元。

关于Spring Dataflow 概念澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40997166/

相关文章:

spring-cloud-dataflow - Spring 配置文件与 Spring Cloud Data Flow

java - 如何使用 Spring Security Java 配置将 HTTP 请求重定向到 HTTPS?

spring - 在 Spring 4.0 中使用 Jersey-spring

spring - 使用Spring Cloud数据流代替Spring Batch的优势

docker - 在Spring Cloud Data Flow服务器上部署dockerized应用

mysql - Spring Cloud数据流无法连接到MySQL DB

java - Spring 启动 : use database config from WildFly's standalone. xml

java - 在 JPA、Hibernate 中验证用户名长度的最佳方法

java - gradle 构建失败 - 可能是 lombok 问题

java - Spring Cloud Dataflow Stream应用程序-将文件夹添加到类路径