使用应用程序与 Spring Cloud Data Flow
Spring Cloud Data Flow 为使用 Spring Cloud Stream 或 Spring Cloud Task 构建的应用程序提供原生支持。给定流定义,例如 http | log
,Data Flow 期望 http
是一个流源,其 output
目标已配置。同样,作为接收器的 log
必须配置一个 input
目标。
要在没有 Data Flow 的情况下运行此管道,您必须使用 Spring Cloud Stream 绑定属性 手动配置这些应用程序,以便
http
的输出与log
的输入同名。- 应用程序具有相同的代理连接属性。
- 定义了一个唯一的消费者组。
然后,您可以将这些应用程序分别部署到您选择的平台。
Data Flow 会为您处理所有这些,以及更多内容。
对于任务应用程序,Data Flow 会为 Spring Cloud Task 和 Spring Batch 初始化一个数据库模式,并在启动任务时提供必要的 JDBC 连接属性,以便任务跟踪其执行状态。Data Flow UI 也提供此信息的视图。
Data Flow 模型随后已扩展为支持不一定符合标准惯例且必须手动配置的应用程序。您可以在 应用程序 DSL 页面和 多语言食谱页面 中找到更多详细信息。
预打包应用程序
Spring 团队提供并支持一系列 预打包应用程序,这些应用程序用于组装各种数据集成和处理管道,并支持生产 Spring Cloud Data Flow 开发、学习和实验。
应用程序注册
要在 Data Flow 中使用应用程序,您必须先注册它。使用 Data Flow 进行流处理 解释了如何注册单个应用程序。这可以是预打包应用程序之一,也可以是自定义应用程序。
批量注册
预打包应用程序页面 介绍了如何批量注册预打包应用程序。
如果您想创建一个文件来批量注册仅您使用的应用程序,包括您自己的应用程序,则此文件的格式为
<type>.<name>=<app-url>
,其中 <type>
包含受支持的应用程序类型(源、处理器、接收器、任务、应用程序),<name>
包含注册名称,<app-url>
是可执行工件的位置。
URL 可以是任何标准 URL,也可以使用 使用 Data Flow 进行流处理 中描述的 Data Flow maven://
或 docker://
格式之一。
为了优化性能,您可以打包包含已公开应用程序属性的名称和说明的应用程序元数据,将其打包到一个单独的配套工件中。这不是必需的,但是,由于在需要应用程序二进制文件之前通常会访问元数据,因此在使用 Data Flow 时,它允许更有效地使用网络资源。在这种情况下,将元数据工件的注册项添加到 <type>.<name>.metadata=app-metadata-url
中。
下面是用于注册 Maven 工件的批量注册文件的代码段
sink.cassandra=maven://org.springframework.cloud.stream.app:cassandra-sink-rabbit:3.2.1
sink.cassandra.metadata=maven://org.springframework.cloud.stream.app:cassandra-sink-rabbit:jar:metadata:3.2.1
sink.s3=maven://org.springframework.cloud.stream.app:s3-sink-rabbit:3.2.1
sink.s3.metadata=maven://org.springframework.cloud.stream.app:s3-sink-rabbit:jar:metadata:3.2.1
从 Data Flow Shell,您可以批量注册应用程序
dataflow:>app import --uri file://path-to-my-app-registration.properties
您还可以传递 --local
选项(默认情况下为 true
),以指示是否应在 shell 进程本身中解析属性文件位置。如果应从 Data Flow Server 进程解析位置,请指定 --local false
。
在使用 app register
或 app import
时,如果某个应用已使用提供的名称、类型和版本注册,则默认情况下不会覆盖它。如果您想覆盖已存在的应用 URI 或 metadata-uri
坐标,请包含 --force
选项。
但是,请注意,一旦下载,应用程序可以根据资源位置在 Data Flow 服务器上本地缓存。如果资源位置没有更改(即使实际资源字节可能不同),也不会重新下载它。另一方面,在使用 maven://
资源时,使用常量位置仍然可以规避缓存(如果使用 -SNAPSHOT
版本)。
此外,如果流已部署并使用某个已注册应用的版本,那么(强制)重新注册一个不同的应用在流重新部署之前不会产生任何效果。