参考指南
本节为您提供Spring Cloud Stream应用程序的详细概述,这些应用程序是开箱即用的。它假设您熟悉通用的Spring Cloud Stream概念,有关更多信息,请参阅Spring Cloud Stream 参考文档。
这些 spring cloud stream 应用程序为您提供开箱即用的独立或与 spring cloud data flow 一起运行的 spring cloud stream 实用应用程序。它们包括:
-
适用于各种中间件技术(包括消息代理、存储(关系型、非关系型、文件系统))的连接器(源、处理器和接收器)。
-
各种网络协议的适配器。
-
可以使用Spring表达式语言(SpEL)或脚本自定义的通用处理器。
您可以在此指南的以下章节中找到所有应用程序及其选项的详细列表。
这些应用程序大多基于核心元素,这些核心元素被公开为java.util.function组件。您可以通过阅读此README了解有关这些基础组件以及它们如何与应用程序连接的更多信息。
1. 预构建应用程序
开箱即用的应用程序是 Spring Boot 应用程序,在应用程序的基本逻辑(例如函数)之上包含一个绑定器实现binder implementation——一个完全功能齐全的可执行 jar 文件。uber-jars包括用于独立执行所需的最少代码。对于每个函数应用程序,该项目都提供了预构建版本的 Apache Kafka 和 Rabbit MQ 绑定器。
| 预构建的应用程序是根据流应用程序生成器Maven插件生成的。 |
2. 分类
根据其目标应用程序类型,它们可以是以下两种之一:
-
一个source,它连接到外部资源以轮询并接收发布到默认“output”通道的数据;
-
一个接收来自“输入”通道的数据并对其进行处理,然后将结果发送到默认的“输出”通道的处理器;
-
一个
,用于连接外部资源并将接收到的数据发送到默认的“输入”通道。
预构建的应用程序遵循命名约定:<functionality>-<type>-<binder>。例如,rabbit-sink-kafka是一个使用运行在Kafka作为中间件的Kafka绑定器的
2.1. Maven 访问
应用程序的核心功能以函数形式提供。
有关详细信息,请参阅stream-applications存储库中的Java 函数部分。
预构建的应用程序作为Maven工件可用。
您可以从Spring Maven存储库下载可执行jar工件。
托管发布版本的Maven存储库根目录为repo.spring.io/release/org/springframework/cloud/stream/app/。
在那里,您可以导航到特定应用的最新已发布版本。
如果您想在自定义应用程序中直接使用函数,则这些工件可在目录结构org/springframework/cloud/fn下获得。
您需要分别使用发行版、里程碑和快照存储库位置来获取发行版、里程碑和快照可执行jar工件。
2.2. Docker 访问
应用程序的Docker版本可在Docker Hub中找到,地址为hub.docker.com/r/springcloudstream/。命名和版本控制遵循与Maven相同的通用约定——例如:
docker pull springcloudstream/cassandra-sink-kafka
前面的命令拉取了最新的 Docker 镜像,其中包含了带有 Kafka 绑定器的 Cassandra sink。
2.3. 构建
您可以从存储库的根目录构建所有内容。
./mvnw clean install
这是一个较长的构建过程,您可能想要跳过测试:
./mvnw clean install -DskipTests
但是,这可能不是您感兴趣的操作,因为您可能只对单个应用程序或少数几个应用程序感兴趣。 为了构建您感兴趣的函数和应用程序,需要按如下所示选择性地构建它们。
2.4. 构建根父级
首先,我们需要构建在各个组件中使用的父级。
./mvnw clean install -f stream-applications-build
2.5. 构建应用程序
假设您想要基于Kafka Binder在Spring Cloud Stream中构建JDBC Source应用程序,并且基于Rabbit binder构建Log Sink应用程序。以下是需要执行的操作。假设您已按照上述方法构建了这两个函数以及stream-applications-core。
./mvnw clean package -pl :jdbc-source
cd applications/source/jdbc-source/apps/jdbc-source-kafka
./mvnw clean package
这将生成基于Kafka绑定的uber jar文件到target文件夹中。
对于日志接收器,执行以下操作。
./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. 添加新依赖项
如果您正在寻找修补预构建应用程序以适应添加新依赖项的方法,可以使用以下示例作为参考。
向jdbc-sink个应用程序添加mysql驱动程序:
-
将 GitHub 仓库克隆到 github.com/spring-cloud/stream-applications
-
找到您要修补的模块并添加额外依赖项,本例中为
jdbc-sink。例如,您可以将以下mysql依赖项添加到pom.xml中的应用程序生成器插件配置中:
<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>
完成上述更改后,您可以从存储库根目录生成绑定器应用程序,如下所示。
./mvnw clean install -pl :jdbc-sink
这会在 jdbc-sink 文件夹下的 apps 文件夹中生成绑定器应用程序。
要使用您感兴趣的绑定器风味构建应用程序,需要执行以下步骤。
cd applications/sink/jdbc-sink
cd apps/jdbc-sink-kafka (or Rabbit if you are interested in that)
./mvnw clean package
cd target
在那里,您将找到带有您的更改的基于绑定器的 uber jar。
3.2. 在应用程序中更新现有依赖项或添加新资源
如上修改插件在需要向应用程序添加新依赖时有效。但是,当需要更新任何现有依赖项时,在生成的应用程序本身中进行maven更改会更简单。例如,如果我们需要从Spring Cloud Stream的新版本更新绑定器依赖项,则这些版本需要在生成的应用程序中进行更新。
以下是步骤(再次说明,我们以jdbc-sink-kafka为例)。
./mvnw clean install -pl :jdbc-sink
cd applications/sink/jdbc-sink/apps/jdbc-sink-kafka
打开生成的应用程序的 pom.xml 并更新依赖项。
如果可用的新版本 Spring Cloud Stream 包含我们所需的增强功能,那么更新 BOM 本身会更容易。
在 pom.xml 中找到声明 bom 的位置并更新版本。
例如,如果我们必须将 Spring Cloud Stream 更新到 Horsham.SR10 版本,则必须在 BOM 声明中指定此版本,如下所示:
<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可用,则更倾向于使用上述dependencyManagement方法。这是因为,在使用BOM时,maven会正确地使用和对齐任何传递依赖项。
如果您需要进一步修改应用程序,再次推荐使用此方法来修改生成的应用程序。
例如,如果您想将安全证书文件(如密钥库或信任库)添加到应用程序的类路径中,则先生成应用程序,然后将这些资源添加到类路径。
请确保您位于生成的 jdbc-sink-kafka 文件夹中,然后执行以下操作:
首先,通过将资源放置在src/main/resources下,将其添加到类路径中。
然后重新构建应用程序。
./mvnw clean package
cd target
您可以在此找到修改后的应用程序jar文件。
4. 为其他绑定器生成开箱即用的应用程序
默认情况下,我们仅提供适用于 Apache Kafka 和 RabbitMQ 绑定器的开箱即用应用程序。
其他绑定器实现也存在,对于这些绑定器,我们可以生成相同的开箱即用应用程序。
例如,如果有人想要为Kinesis 绑定器、Solace 绑定器或Google gcp pubsub 绑定器等生成这些应用程序,则可以按照下面的说明进行操作。
首先,克隆流应用程序仓库。
cd 应用程序/流应用程序核心
我们需要编辑此模块中的 pom.xml 文件。<br/>找到以下配置,它定义了 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>
为想要生成新应用程序的绑定器添加绑定器。
例如,如果我们想为Kinesis 绑定器生成应用程序,则按如下方式修改。
<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 绑定版本,而 Kafka 和 RabbitMQ 则不需要。 这是因为这些版本来自依赖管理,而 Kinesis 绑定无法通过此类机制获得。 因此,我们需要显式地使用绑定版本。 如果我们有一个定义了版本的 BOM 可用,那么可以使用它代替,只需确保在 Maven 插件的适当 BOM 部分声明即可。
如果为生成应用程序而依赖的绑定器使用了不同版本的 Spring Cloud Stream,请确保在 Maven 属性中更新。
现在,我们可以构建:./mvnw clean install -DskipTests。
如果我们进入应用程序文件夹并查看生成的应用程序,我们应该能够在其中看到新的绑定器变体。例如,如果按照上面的配置添加Kinesis绑定器,那么我们应该在生成的应用程序中看到基于Kinesis绑定器的应用程序。让我们以time-source为例。
cd applications/source/time-souce/apps
在这里,我们应该看到三个基于绑定器的应用程序项目——time-source-kafka、time-source-rabbit 和 time-source-kineses。同样地,这应该适用于所有开箱即用的应用程序项目。
请记住,这些生成的应用程序还需要单独进行构建。为此,请转到生成的应用程序文件夹,然后启动Maven构建。