参考指南

本节为您提供开箱即用的春季云流应用的详细概述。 它假设你熟悉 Spring Cloud Stream 的通用概念,这些内容可以在 Spring Cloud Stream 参考文档中找到。spring-doc.cadn.net.cn

这些 Spring Cloud Stream 应用为你提供了开箱即用的 Spring Cloud Stream 工具应用,你可以独立运行,也可以配合 Spring Cloud 数据流运行。包括:spring-doc.cadn.net.cn

您可以在本指南的以下章节中找到所有申请及其选项的详细列表。spring-doc.cadn.net.cn

大多数这些应用基于暴露为java.util.function元件。 您可以通过阅读这份README了解更多关于这些基础组件及其与应用的关联。spring-doc.cadn.net.cn

1. 预构建应用程序

开箱即用应用是指在应用基本逻辑之上(例如函数)之上还包含了绑定器实现的 Spring Boot 应用程序——一个功能齐全的 uber-jar。 这些超级瓶包含了独立执行所需的最小代码。 对于每个函数应用,项目都提供了预构建的 Apache Kafka 和 Rabbit MQ Binder 版本。spring-doc.cadn.net.cn

预构建的应用程序是根据流应用生成器 Maven 插件生成的。

2. 分类

根据其目标应用类型,它们可以是:spring-doc.cadn.net.cn

  • 一个连接到外部资源以轮询并接收发布到默认“输出”通道的数据源;spring-doc.cadn.net.cn

  • 一个处理器接收来自“输入”通道的数据并进行处理,并将结果发送到默认的“输出”通道;spring-doc.cadn.net.cn

  • 一个连接外部资源、将接收数据发送到默认“输入”通道的汇入器。spring-doc.cadn.net.cn

预构建的应用程序遵循以下命名规范:<功能>-<类型>-<binder>.例如兔子水槽卡夫卡是一个使用Kafka绑定器运行的兔子水槽,而Kafka作为中间件运行。spring-doc.cadn.net.cn

2.1. Maven 访问

应用程序的核心功能以函数形式提供。 参见 Java 函数部分流式应用更多详情请见仓库。 预构建的应用程序以Maven工件形式提供。 你可以从 Spring Maven 仓库下载可执行的 jar 工件。 托管发布版本的 Maven 仓库的根目录是 repo.spring.io/release/org/springframework/cloud/stream/app/。 然后,你可以访问特定应用的最新版本。 如果你想直接在自定义应用中使用函数,这些工件可以在目录结构下使用org/springframework/cloud/fn. 你需要分别使用发布里程碑快照仓库位置来存放发布、里程碑和快照可执行的jar伪影。spring-doc.cadn.net.cn

2.2. Docker 访问

应用程序的 Docker 版本可在 Docker Hub 中获得,地址为hub.docker.com/r/springcloudstream/. 命名和版本控制遵循与 Maven 相同的一般惯例——例如:spring-doc.cadn.net.cn

docker pull springcloudstream/cassandra-sink-kafka

前面的命令是拉取带有 Kafka 绑定器的最新 Cassandra Sink Docker 映像。spring-doc.cadn.net.cn

2.3. 建造

你可以从仓库的根节点构建一切。spring-doc.cadn.net.cn

./mvnw 干净安装spring-doc.cadn.net.cn

这是一个很长的构建过程,你可能想跳过测试:spring-doc.cadn.net.cn

./mvnw 干净安装 - DskipTestsspring-doc.cadn.net.cn

不过,这可能不是你感兴趣的,因为你可能只关注一个或几个申请。 为了构建你感兴趣的函数和应用,你需要像下面所示有选择地构建它们。spring-doc.cadn.net.cn

2.4. 构建根父

首先,我们需要构建用于各个组件的父节点。spring-doc.cadn.net.cn

./mvnw clean install -f stream-applications-buildspring-doc.cadn.net.cn

2.4.1. 架构功能

./mvnw clean install -f functions -DskipTestsspring-doc.cadn.net.cn

你也可以构建一个函数或一组函数。 例如,如果你只对jdbc-supplier和log-consumer感兴趣,可以这样做。spring-doc.cadn.net.cn

./mvnw clean install -pl :jdbc-suppler,:log-consumerspring-doc.cadn.net.cn

2.4.2. 构建流应用核心

./mvnw clean install -f applications/stream-applications-core -DskipTestsspring-doc.cadn.net.cn

2.5. 构建应用程序

假设你想在 Spring Cloud Stream 中基于 Kafka Binder 构建 JDBC Source 应用,基于 Rabbit Binder 构建 Log Sink 应用。 你需要做的是这些。 假设你像上面那样同时构建了函数和流-应用-核心。spring-doc.cadn.net.cn

./mvnw clean package -pl :jdbc-source
cd applications/source/jdbc-source/apps/jdbc-source-kafka
./mvnw clean package

这会在目标文件夹中生成基于Kafka的Uber jar。spring-doc.cadn.net.cn

同样地,木头水槽也要这样做。spring-doc.cadn.net.cn

./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 镜像。 如果你对某个应用做了修改,可能需要构建镜像并在本地测试。spring-doc.cadn.net.cn

如果你打算用 minikube 使用这张图片,在构建图片前请执行以下命令:
eval $(minikube docker-env)

要在本地注册表中构建镜像:spring-doc.cadn.net.cn

./mvnw clean package jib:dockerBuild

要将镜像发布到远程注册表:spring-doc.cadn.net.cn

./mvnw jib:build \
    -Djib.to.image=myregistry/myimage:latest \
    -Djib.to.auth.username=$USERNAME \
    -Djib.to.auth.password=$PASSWORD

3. 对预构建应用程序进行修补

3.1. 添加新的依赖

如果你想修补预构建的应用程序以适应新增依赖,可以参考以下示例。 补充一点MySQLDrivers到他JDBC汇应用:spring-doc.cadn.net.cn

  1. github.com/spring-cloud/stream-applications 克隆GitHub仓库spring-doc.cadn.net.cn

  2. 找到你想打补丁的模块,添加额外的依赖,JDBC汇在这种情况下。例如,你可以在pom.xml中向应用生成器插件的配置添加以下 mysql 依赖:spring-doc.cadn.net.cn

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.37</version>
  </dependency>

这就是完整的插件配置应该呈现的样子。spring-doc.cadn.net.cn

 <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>

完成上述更改后,你可以从仓库根生成如下的绑定器应用。spring-doc.cadn.net.cn

./mvnw clean install -pl :jdbc-sink

这会生成基于粘合剂的应用应用程序文件夹JDBC汇文件夹。 为了打造你感兴趣的活页夹风格的应用,你需要做以下步骤。spring-doc.cadn.net.cn

cd applications/sink/jdbc-sink
cd apps/jdbc-sink-kafka # (or Rabbit if you are interested in that)
./mvnw clean package
cd target

在那里你会找到基于活页夹的超级罐,里面装有你的修改。spring-doc.cadn.net.cn

3.2. 更新现有依赖或在应用中添加新资源

当应用程序需要添加新的依赖时,像上述方式修改插件是可行的。然而,当我们需要更新任何现有依赖时,在生成的应用程序中进行 maven 的修改会更容易。例如,如果我们需要从新版本的 Spring Cloud Stream 更新绑定器依赖,那么这些版本需要在生成的应用中更新。spring-doc.cadn.net.cn

以下是步骤(同样,我们使用JDBC-sink-kafka举个例子)。spring-doc.cadn.net.cn

./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-doc.cadn.net.cn

例如,如果我们必须将Spring Cloud Stream更新为3.2.4-快照该版本必须在BOM声明中具体说明如下:spring-doc.cadn.net.cn

<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>

我们也可以直接更新任何单个依赖,但更倾向于使用上述方式依赖管理如果存在 BOM 就采取方法。这是因为在使用 BOM 时,maven 会正确使用并对齐任何传递依赖。spring-doc.cadn.net.cn

如果需要进一步修改应用,这种修改生成应用的方法仍然是推荐的。spring-doc.cadn.net.cn

例如,如果你想在应用的类路径中添加安全证书文件,比如密钥存储或信任存储,那么先生成应用程序,然后将这些资源添加到类路径中。spring-doc.cadn.net.cn

确保你在生成的范围内JDBC-sink-kafka文件夹,然后做以下作:spring-doc.cadn.net.cn

首先,将资源添加到类路径中,将其置于src/主/资源.spring-doc.cadn.net.cn

然后重建应用程序。spring-doc.cadn.net.cn

./mvnw clean package
cd target

这里你可以找到修改后的应用程序jar文件。spring-doc.cadn.net.cn

4. 为其他活页夹生成即兴应用

默认情况下,我们只提供Apache Kafka和RabbitMQ绑定器的开箱即用应用。还有其他绑定器实现,我们可以生成这些开箱即用的应用。例如,如果想为Kinesis装订器或Solace装订器等生成这些应用,可以通过以下说明实现。spring-doc.cadn.net.cn

第一步,克隆流应用仓库。spring-doc.cadn.net.cn

cd applications/stream-applications-core

我们需要编辑这个模块中的pom.xml。找到以下配置,定义了 Maven 插件的 Kafka 和 RabbitMQ 绑定器。spring-doc.cadn.net.cn

<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 装订器生成应用,可以按下面方式修改。spring-doc.cadn.net.cn

<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 可用,就可以用它代替,只要确保 BOM 在 maven 插件的正确 BOM 部分声明即可。spring-doc.cadn.net.cn

如果你生成应用的绑定器依赖的是不同版本的 Spring Cloud Stream,确保它在 maven 属性中已更新。spring-doc.cadn.net.cn

现在,我们可以构建:./mvnw 干净安装 - DskipTests.spring-doc.cadn.net.cn

如果我们进入应用文件夹查看生成的应用程序,应该会看到新的绑定器变体。例如,如果按照上面添加 Kinesis 绑定器的配置,那么生成的应用中应该会看到基于 Kinesis 的绑定器应用。我们来看看时间源举个例子。spring-doc.cadn.net.cn

cd applications/source/time-souce/apps

这里,我们应该看到三个不同的基于活塞的应用项目——时间-来源-卡夫卡,时间-源-兔子时间-源-动Mechanics. 同样,所有开箱即用的应用项目也应该如此。spring-doc.cadn.net.cn

请记住,这些生成的应用程序还需要单独构建。为此,进入生成应用文件夹,然后启动 Maven 构建。spring-doc.cadn.net.cn