参考指南
本节为您提供开箱即用的春季云流应用的详细概述。 它假设你熟悉 Spring Cloud Stream 的通用概念,这些内容可以在 Spring Cloud Stream 参考文档中找到。
这些 Spring Cloud Stream 应用为你提供了开箱即用的 Spring Cloud Stream 工具应用,你可以独立运行,也可以配合 Spring Cloud 数据流运行。包括:
-
多种中间件技术的连接器(源、处理器和汇),包括消息代理、存储(关系型、非关系型、文件系统)。
-
各种网络协议的适配器。
-
通用处理器,你可以用 Spring 表达式语言(SpEL)或脚本自定义。
您可以在本指南的以下章节中找到所有申请及其选项的详细列表。
大多数这些应用基于暴露为java.util.function元件。 您可以通过阅读这份README了解更多关于这些基础组件及其与应用的关联。
1. 预构建应用程序
开箱即用应用是 Spring Boot 应用程序,它们在应用的基本逻辑(例如函数)之上包含了绑定器实现——一个功能齐全的 uber-jar。这些 uber-jar 包含了独立执行所需的最小代码。对于每个函数应用,项目都提供了预构建的 Apache Kafka 和 Rabbit MQ Binder 版本。
| 预构建的应用程序是根据流应用生成器 Maven 插件生成的。 |
2. 分类
根据其目标应用类型,它们可以是:
-
一个连接到外部资源以轮询并接收发布到默认“输出”通道的数据源;
-
一个处理器接收来自“输入”通道的数据并进行处理,并将结果发送到默认的“输出”通道;
-
一个连接外部资源、将接收数据发送到默认“输入”通道的汇入器。
预构建的应用程序遵循以下命名规范:<功能>-<类型>-<binder>. 例如兔子水槽卡夫卡是一个使用Kafka绑定器运行的兔子水槽,而Kafka作为中间件运行。
2.1. Maven 访问
应用程序的核心功能以函数形式提供。参见 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
前面的命令是拉取带有 Kafka 绑定器的最新 Cassandra Sink Docker 映像。
3. 对预构建应用程序进行修补
3.1. 添加新的依赖
如果你想修补预构建的应用程序以适应新增依赖的添加,可以参考以下示例。补充MySQLDrivers到他JDBC汇应用:
-
在 github.com/spring-cloud/stream-applications 克隆GitHub仓库
-
找到你想打补丁的模块,添加额外的依赖,
JDBC汇在这种情况下。例如,你可以在应用生成器插件的配置中添加以下 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汇文件夹。 为了打造你感兴趣的活页夹风格的应用,你需要做以下步骤。
cd applications/sink/jdbc-sink
cd apps/jdbc-sink-kafka # (or Rabbit if you are interested in that)
./mvnw clean package
cd target
在那里你会找到基于活页夹的超级罐,里面装有你的修改。
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 本身会更容易。
找到BOM申报的位置pom.xml并更新版本。
例如,如果我们必须将Spring Cloud Stream更新为3.2.4-快照该版本必须在BOM声明中具体说明如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-dependencies</artifactId>
<version>4.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
我们也可以直接更新任何单个依赖,但更倾向于使用上述方式依赖管理如果有物料清单可用,就接近。
这是因为在使用物料清单时,Maven会正确使用并对齐任何传递依赖。
如果需要进一步修改应用,这种修改生成应用的方法仍然是推荐的。
例如,如果你想在应用的类路径中添加安全证书文件,比如密钥存储或信任存储,那么先生成应用程序,然后将这些资源添加到类路径中。
确保你在生成的范围内JDBC-sink-kafka文件夹,然后做以下作:
首先,将资源添加到类路径中,将其置于src/主/资源.
然后重建应用程序。
./mvnw clean package
cd target
这里你可以找到修改后的应用程序jar文件。
4. 为其他活页夹生成即兴应用
默认情况下,我们只提供 Apache Kafka 和 RabbitMQ 绑定器的开箱即用应用。 还有其他活页夹实现,我们可以生成这些开箱即用的应用。 例如,如果想为 Kinesis 活页夹或 Solace 活页夹等生成这些应用,可以通过以下说明实现。
第一步,克隆流应用仓库。
cd applications/stream-applications-core
我们需要编辑这个模块的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>
添加你想生成新应用的文件夹。 例如,如果我们想为 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 干净安装 - DskipTests.
如果我们进入应用文件夹查看生成的应用,应该能看到新的绑定器变体。
例如,如果我们按照上面添加 Kinesis 绑定器的配置,那么生成的应用中应该会看到基于 Kinesis 绑定器的应用。
我们来取时间源举个例子。
cd applications/source/time-souce/apps
这里,我们应该看到三个不同的基于活塞的应用项目——时间-来源-卡夫卡,时间-源-兔子和时间-源-动Mechanics.
同样,所有开箱即用的应用项目也应该如此。
请记住,这些生成的应用程序还需要单独构建。 为此,进入生成的应用程序文件夹,然后启动 Maven 构建。