参考指南
本节详细介绍了开箱即用的 Spring Cloud Stream 应用程序。 它假定您熟悉一般的 Spring Cloud Stream 概念,您可以在 Spring Cloud Stream 参考文档中找到这些概念。
这些 Spring Cloud Stream 应用程序为您提供了开箱即用的 Spring Cloud Stream 实用程序应用程序,您可以独立运行这些应用程序,也可以与 Spring Cloud Data Flow 一起运行。他们包括:
-
适用于各种中间件技术的连接器(源、处理器和接收器),包括消息代理、存储(关系、非关系、文件系统)。
-
适用于各种网络协议的适配器。
-
可以使用 Spring 表达式语言 (SpEL) 或通过脚本进行自定义的通用处理器。
您可以在本指南的以下部分中找到所有应用程序及其选项的详细列表。
这些应用程序中的大多数都基于作为组件公开的核心元素。
通过阅读此 README,您可以了解有关这些基础组件以及它们如何连接到应用程序的更多信息。java.util.function
1. 预构建的应用程序
开箱即用的应用程序是 Spring Boot 应用程序,它们在应用程序的基本逻辑(例如函数)之上包含一个 binder 实现 — 一个功能齐全的 uber-jar。 这些 uber-jar 包含独立执行所需的最少代码。 对于每个函数应用程序,该项目都提供了 Apache Kafka 和 Rabbit MQ Binders 的预构建版本。
预构建的应用程序是根据流应用程序生成器 Maven 插件生成的。 |
2. 分类
根据其目标应用程序类型,它们可以是:
-
连接到外部资源以轮询和接收发布到默认 “output” 通道的数据的源;
-
从 “input” 通道接收数据并对其进行处理,在默认的 “output” 通道上发送结果的处理器;
-
一个连接到外部资源以将接收到的数据发送到默认的 “input” 通道的 sink。
预构建的应用程序遵循命名约定:.例如,是一个 Rabbit 接收器,它使用以 Kafka 作为中间件运行的 Kafka 活页夹。<functionality>-<type>-<binder>
rabbit-sink-kafka
2.1. Maven 访问
应用程序的核心功能以函数的形式提供。
有关更多详细信息,请参阅存储库中的 Java Functions 部分。
预构建的应用程序作为 Maven 工件提供。
您可以从 Spring Maven 存储库下载可执行 jar 工件。
托管发布版本的 Maven 存储库的根目录为 repo.spring.io/release/org/springframework/cloud/stream/app/。
从那里,您可以导航到特定应用程序的最新发布版本。
如果要直接在自定义应用程序中使用函数,则这些对象位于 directory structure 下。
您需要分别将 Release、Milestone 和 Snapshot 存储库位置用于 Release、Milestone 和 Snapshot 可执行 jar 构件。stream-applications
org/springframework/cloud/fn
2.2. Docker 访问
应用程序的 Docker 版本在 Docker Hub 中提供,网址为 。
命名和版本控制遵循与 Maven 相同的一般约定 — 例如:hub.docker.com/r/springcloudstream/
docker pull springcloudstream/cassandra-sink-kafka
上述命令使用 Kafka Binder 拉取 Cassandra 接收器的最新 Docker 映像。
2.3. 构建
您可以从存储库的根目录构建所有内容。
./mvnw clean install
这是一个很长的构建版本,您可能希望跳过测试:
./mvnw clean install -DskipTests
但是,这可能不是您感兴趣的,因为您可能对单个应用程序或其中几个应用程序感兴趣。 为了构建您感兴趣的函数和应用程序,您需要有选择地构建它们,如下所示。
2.4. 构建 root parent
首先,我们需要构建各种组件中使用的父级。
./mvnw clean install -f stream-applications-build
2.5. 构建应用程序
假设您想在 Spring Cloud Stream 中基于 Kafka Binder 构建 JDBC Source 应用程序,并在 Rabbit Binder 上构建 Log Sink 应用程序。 这是您需要做的。 假设您如上所述构建了 functions 和 stream-applications-core。
./mvnw clean package -pl :jdbc-source
cd applications/source/jdbc-source/apps/jdbc-source-kafka
./mvnw clean package
这将在目标文件夹中生成基于 Kafka Binder 的 uber jar。
同样,对于日志接收器,请执行以下操作。
./mvnw clean package -pl :log-sink
cd applications/sink/log-sink/apps/log-sink-rabbit
./mvnw clean package
2.5.1. 构建 Docker 镜像
这些应用程序使用 Jib Maven 插件来构建和发布 Docker 镜像。 如果您对应用程序进行了一些更改,则可能需要构建映像并在本地进行测试。
如果您计划将镜像与 minikube 一起使用,请在构建镜像之前运行以下命令: |
eval $(minikube docker-env)
要在本地注册表中构建镜像,请执行以下操作:
./mvn clean package jib:dockerBuild
要将镜像发布到远程注册表:
jib:build \
-Djib.to.image=myregistry/myimage:latest \
-Djib.to.auth.username=$USERNAME \
-Djib.to.auth.password=$PASSWORD
3. 修补预构建的应用程序
3.1. 添加新的依赖项
如果您希望修补预构建的应用程序以适应添加新的依赖项,则可以使用以下示例作为参考。
要将驱动程序添加到应用程序:mysql
jdbc-sink
-
在 github.com/spring-cloud/stream-applications 克隆 GitHub 存储库
-
在本例中,找到要修补的模块并添加其他依赖项。例如,您可以在 pom.xml 中将以下 mysql 依赖项添加到应用程序生成器插件的配置中:
jdbc-sink
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
这就是完整的插件配置应该是什么样子。
<plugin>
<groupId>org.springframework.cloud.stream.app.plugin</groupId>
<artifactId>spring-cloud-stream-app-maven-plugin</artifactId>
<configuration>
<generatedApp>
<name>jdbc</name>
<type>sink</type>
<version>${project.version}</version>
<configClass>org.springframework.cloud.fn.consumer.jdbc.JdbcConsumerConfiguration.class</configClass>
</generatedApp>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>jdbc-consumer</artifactId>
<version>${java-functions.version}</version>
</dependency>
</dependencies>
</configuration>
</plugin>
完成上述更改后,您可以从存储库的根目录生成基于 Binder 的应用程序,如下所示。
./mvnw clean install -pl :jdbc-sink
这将在文件夹下的文件夹中生成基于 Binder 的应用程序。
为了使用您感兴趣的 Binder 风格构建应用程序,您需要执行以下步骤。apps
jdbc-sink
cd applications/sink/jdbc-sink
cd apps/jdbc-sink-kafka (or Rabbit if you are interested in that)
./mvnw clean package
cd target
在那里,您将找到包含您的更改的基于 binder 的 uber jar。
3.2. 在应用程序中更新现有依赖项或添加新资源
当有新的依赖项要添加到应用程序时,按上述方式修改插件是可行的。 但是,当我们需要更新任何现有的依赖项时,在生成的应用程序本身中进行 maven 更改会更容易。 例如,如果我们必须从新版本的 Spring Cloud Stream 更新 Binder 依赖项,则需要在生成的应用程序中更新这些版本。
以下是步骤(同样,我们用作示例)。jdbc-sink-kafka
./mvnw clean install -pl :jdbc-sink
cd applications/sink/jdbc-sink/apps/jdbc-sink-kafka
打开生成的应用程序并更新依赖项。
如果有新版本的 Spring Cloud Stream 更新可用,其中包含我们正在寻找的增强功能,那么更新 BOM 本身会更容易。
找到声明 bom 的位置并更新版本。pom.xml
pom.xml
例如,如果我们必须将 Spring Cloud Stream 更新到 ,则必须在 BOM 声明中指定此版本,如下所示:Horsham.SR10
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-dependencies</artifactId>
<version>Horsham.SR10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
我们也可以直接更新任何单独的依赖项,但如果有可用的 BOM,最好使用上述方法。
这是因为,在使用 BOM 时,maven 将正确使用和对齐任何传递依赖项。dependencyManagement
如果您必须进一步修改应用程序,则这种修改生成的应用程序的方法也是推荐的方法。
例如,如果要将安全证书文件(如密钥存储区或信任存储区)添加到应用程序的 Classpath 中,则首先生成应用程序并将这些资源添加到 Classpath 中。
确保您位于生成的文件夹中,然后执行以下操作:jdbc-sink-kafka
首先,通过将资源放在 下,将资源添加到 Classpath 中。src/main/resources
然后重新构建应用程序。
./mvnw clean package
cd target
在这里,您可以找到修改后的应用程序 jar 文件。
4. 为其他活页夹生成开箱即用的应用程序
默认情况下,我们只为 Apache Kafka 和 RabbitMQ 绑定程序提供开箱即用的应用程序。 还有其他 Binder 实现,我们可以为其生成相同的开箱即用的应用程序。 例如,如果要为 Kinesis Binder、Solace Binder 或 Google gcp pubsub Binder 等生成这些应用程序,则可以按照以下说明进行操作。
第一步,克隆流应用程序存储库。
cd 应用程序/流应用程序核心
我们需要编辑此模块中的 pom.xml。 找到以下配置,其中它为 maven 插件定义 Kafka 和 RabbitMQ 绑定程序。
<kafka>
<maven>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
</dependencies>
</maven>
</kafka>
<rabbit>
<maven>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
</dependencies>
</maven>
</rabbit>
添加要为其生成新应用程序的 Binder。 例如,如果我们想为 Kinesis Binder 生成应用程序,则按如下方式进行修改。
<binders>
<kafka>
<maven>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
</dependencies>
</maven>
</kafka>
<rabbit>
<maven>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
</dependencies>
</maven>
</rabbit>
<kinesis>
<maven>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kinesis</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
</dependencies>
</maven>
</kinesis>
</binders>
请注意,我们需要在此处显式使用 Kinesis Binder 版本,而 Kafka 和 RabbitMQ 都不需要它们。 这是因为,这些版本来自依赖项管理,而 Kinesis Binder 无法通过此类机制使用。 因此,我们需要显式使用 Binder 版本。 如果我们有一个定义版本的可用 BOM,那么可以使用它,只需确保在 maven 插件的正确 BOM 部分中声明它。
如果要为其生成应用程序的 Binder 依赖于不同版本的 Spring Cloud Stream,请确保在 maven 属性中更新该版本。
现在,我们可以构建: ../mvnw clean install -DskipTests
如果我们转到 applications 文件夹并查看生成的应用程序,我们应该在那里看到新的 Binder 变体。
例如,如果我们按照上述配置添加 Kinesis Binder,那么我们应该在生成的应用程序中看到基于 Kinesis Binder 的应用程序。
让我们举个例子。time-source
cd applications/source/time-souce/apps
在这里,我们应该看到三个不同的基于 Binder 的应用程序项目 - 和 。
同样,所有开箱即用的应用程序项目都应该发生这种情况。time-source-kafka
time-source-rabbit
time-source-kineses
请记住,这些生成的应用程序还需要单独构建。 为此,请转到生成的 applications 文件夹,然后启动 maven 构建。