附录

在使用 Spring Cloud Data Flow 时遇到困难,我们想帮忙!spring-doc.cadn.net.cn

附录A:数据流模板

正如API指南章节所述,Spring Cloud数据流的功能完全通过REST端点开放。 虽然你可以直接使用这些端点,但Spring Cloud Data Flow还提供了一个基于Java的API,使使用这些REST端点更加简单。spring-doc.cadn.net.cn

中央入口点为DataFlowTemplateorg.springframework.cloud.dataflow.rest.client包。spring-doc.cadn.net.cn

该类实现了数据流作接口并委派到以下子模板,这些子模板为每个功能集提供具体功能:spring-doc.cadn.net.cn

接口 描述

StreamOperationsspring-doc.cadn.net.cn

流作的 REST 客户端spring-doc.cadn.net.cn

反击行动spring-doc.cadn.net.cn

计数器作的 REST 客户端spring-doc.cadn.net.cn

场值反作战spring-doc.cadn.net.cn

字段值计数作的 REST 客户端spring-doc.cadn.net.cn

总反作战spring-doc.cadn.net.cn

用于聚合计数作的REST客户端spring-doc.cadn.net.cn

任务作spring-doc.cadn.net.cn

任务作的 REST 客户端spring-doc.cadn.net.cn

工作运营spring-doc.cadn.net.cn

作业作的 REST 客户端spring-doc.cadn.net.cn

应用注册管理spring-doc.cadn.net.cn

用于应用注册表作的 REST 客户端spring-doc.cadn.net.cn

完工运营spring-doc.cadn.net.cn

完备作的 REST 客户端spring-doc.cadn.net.cn

运行时作spring-doc.cadn.net.cn

运行时作的 REST 客户端spring-doc.cadn.net.cn

DataFlowTemplate正在初始化时,子模板可以通过HATEOAS(Hypermedia as the Engine of Application State)提供的REST关系来发现。spring-doc.cadn.net.cn

如果某个资源无法解析,相应的子模板结果为 NULL。一个常见原因是 Spring Cloud Data Flow 允许特定的功能集在启动时启用或禁用。更多信息,请参阅本地、Cloud FoundryKubernetes 配置章节,具体取决于你部署应用的地点。

A.1. 使用数据流模板

使用数据流模板时,唯一需要的数据流依赖是Spring Cloud 数据流 Rest 客户端,如下 Maven 摘要所示:spring-doc.cadn.net.cn

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-dataflow-rest-client</artifactId>
  <version>2.10.3</version>
</dependency>

有了这种依赖,你会得到DataFlowTemplate以及调用 Spring Cloud Data Flow 服务器所需的所有依赖。spring-doc.cadn.net.cn

当实例化DataFlowTemplate,你也通过了Rest模板. 注意,所需的Rest模板需要某些额外的配置才能在DataFlowTemplate. 当声明Rest模板作为豆子,以下配置即可满足:spring-doc.cadn.net.cn

  @Bean
  public static RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setErrorHandler(new VndErrorResponseErrorHandler(restTemplate.getMessageConverters()));
    for(HttpMessageConverter<?> converter : restTemplate.getMessageConverters()) {
      if (converter instanceof MappingJackson2HttpMessageConverter) {
        final MappingJackson2HttpMessageConverter jacksonConverter =
            (MappingJackson2HttpMessageConverter) converter;
        jacksonConverter.getObjectMapper()
            .registerModule(new Jackson2HalModule())
            .addMixIn(JobExecution.class, JobExecutionJacksonMixIn.class)
            .addMixIn(JobParameters.class, JobParametersJacksonMixIn.class)
            .addMixIn(JobParameter.class, JobParameterJacksonMixIn.class)
            .addMixIn(JobInstance.class, JobInstanceJacksonMixIn.class)
            .addMixIn(ExitStatus.class, ExitStatusJacksonMixIn.class)
            .addMixIn(StepExecution.class, StepExecutionJacksonMixIn.class)
            .addMixIn(ExecutionContext.class, ExecutionContextJacksonMixIn.class)
            .addMixIn(StepExecutionHistory.class, StepExecutionHistoryJacksonMixIn.class);
      }
    }
    return restTemplate;
  }
你也可以买一个预配置的Rest模板通过DataFlowTemplate.getDefaultDataflowRestTemplate();

现在你可以实例化DataFlowTemplate代码如下:spring-doc.cadn.net.cn

DataFlowTemplate dataFlowTemplate = new DataFlowTemplate(
    new URI("http://localhost:9393/"), restTemplate);         (1)
1 URI指向你 Spring Cloud 数据流服务器的根节点。

根据你的需求,你现在可以给服务器打电话了。 例如 如果您想获取当前可用应用的列表,可以运行以下代码:spring-doc.cadn.net.cn

PagedResources<AppRegistrationResource> apps = dataFlowTemplate.appRegistryOperations().list();

System.out.println(String.format("Retrieved %s application(s)",
    apps.getContent().size()));

for (AppRegistrationResource app : apps.getContent()) {
  System.out.println(String.format("App Name: %s, App Type: %s, App URI: %s",
    app.getName(),
    app.getType(),
    app.getUri()));
}

答:2. 数据流模板与安全性

当使用DataFlowTemplate你也可以像使用数据流壳一样提供所有与安全相关的选项。事实上,数据流壳使用了DataFlowTemplate所有的行动。spring-doc.cadn.net.cn

为了让你开始,我们提供了HttpClientConfigurer使用构建器模式来设置各种安全相关选项:spring-doc.cadn.net.cn

	HttpClientConfigurer
		.create(targetUri)                                             (1)
		.basicAuthCredentials(username, password)                      (2)
		.skipTlsCertificateVerification()                              (3)
		.withProxyCredentials(proxyUri, proxyUsername, proxyPassword)  (4)
		.addInterceptor(interceptor)                                   (5)
		.buildClientHttpRequestFactory()                               (6)
1 创建一个包含目标 URI 的 HttpClientConfigurer。
2 设置基本认证凭证(使用 OAuth2 密码授予)
3 跳过SSL证书验证(仅用于开发!)
4 配置任何代理设置
5 添加自定义拦截器,例如设置OAuth2授权头部。这允许你通过OAuth2访问Tokens代替用户名/密码凭证。
6 建造ClientHttpRequestFactory可以设置为Rest模板.

一旦HttpClientConfigurer配置后,你可以使用buildClientHttpRequestFactory以建造ClientHttpRequestFactory然后将相应的性质设在Rest模板. 然后你可以实例化实际DataFlowTemplate利用该方法Rest模板.spring-doc.cadn.net.cn

要配置基础认证,需要进行以下设置:spring-doc.cadn.net.cn

	RestTemplate restTemplate = DataFlowTemplate.getDefaultDataflowRestTemplate();
	HttpClientConfigurer httpClientConfigurer = HttpClientConfigurer.create("http://localhost:9393");

	httpClientConfigurer.basicAuthCredentials("my_username", "my_password");
	restTemplate.setRequestFactory(httpClientConfigurer.buildClientHttpRequestFactory());

	DataFlowTemplate dataFlowTemplate = new DataFlowTemplate("http://localhost:9393", restTemplate);

附录B:“作指南”

本节将解答一些常见的“我该如何做到......”这些问题在使用 Spring Cloud Data Flow 时经常出现。spring-doc.cadn.net.cn

如果你有我们这里没有涉及的具体问题,建议你查看 stackoverflow.com 是否有人已经给出了答案。这里也是提问新问题的好地方(使用Spring-cloud-dataflow标签)。spring-doc.cadn.net.cn

我们也很乐意延长这一部分。如果你想添加“作指南”,可以发送拉取请求spring-doc.cadn.net.cn

B.1. 配置Maven属性

你可以在启动数据流服务器时通过命令行属性设置 Maven 属性,如本地 Maven 仓库位置、远程 Maven 仓库、认证凭证和代理服务器属性。 或者,你可以通过设置SPRING_APPLICATION_JSON数据流服务器的环境属性。spring-doc.cadn.net.cn

如果应用程序通过 Maven 仓库解析,远程 Maven 仓库需要显式配置。 此规则的唯一例外是当地Data Flow 服务器安装,已经预先配置好了 Maven Central 和 Spring Artifactory 远程仓库。 另一个(非局部服务器安装没有远程仓库的默认值。spring-doc.cadn.net.cn

如果你配置了自己的远程仓库,务必添加Maven Central (repo.maven.apache.org/maven2因为不会自动添加给你。

要将属性作为命令行选项传递,运行服务器时,命令类似于以下内容:spring-doc.cadn.net.cn

$ java -jar <dataflow-server>.jar --maven.localRepository=mylocal
--maven.remote-repositories.repo1.url=https://repo1
--maven.remote-repositories.repo1.auth.username=repo1user
--maven.remote-repositories.repo1.auth.password=repo1pass
--maven.remote-repositories.repo2.url=https://repo2 --maven.proxy.host=proxyhost
--maven.proxy.port=9018 --maven.proxy.auth.username=proxyuser
--maven.proxy.auth.password=proxypass

你也可以使用SPRING_APPLICATION_JSON环境特性:spring-doc.cadn.net.cn

export SPRING_APPLICATION_JSON='{ "maven": { "local-repository": "local","remote-repositories": { "repo1": { "url": "https://repo1", "auth": { "username": "repo1user", "password": "repo1pass" } },
"repo2": { "url": "https://repo2" } }, "proxy": { "host": "proxyhost", "port": 9018, "auth": { "username": "proxyuser", "password": "proxypass" } } } }'

以下是格式良好的JSON格式的相同内容:spring-doc.cadn.net.cn

SPRING_APPLICATION_JSON='{
  "maven": {
    "local-repository": "local",
    "remote-repositories": {
      "repo1": {
        "url": "https://repo1",
        "auth": {
          "username": "repo1user",
          "password": "repo1pass"
        }
      },
      "repo2": {
        "url": "https://repo2"
      }
    },
    "proxy": {
      "host": "proxyhost",
      "port": 9018,
      "auth": {
        "username": "proxyuser",
        "password": "proxypass"
      }
    }
  }
}'
根据 Spring Cloud Data Flow 服务器的实现,你可能需要通过平台特定的环境设置功能传递环境属性。例如,在Cloud Foundry中,你会将这些数据传递为CF SET-ENV SPRING_APPLICATION_JSON.

B.2. 故障排查

本节介绍如何在您选择的平台上排查Spring云数据流问题。请参见微站的故障排除部分,了解处理和批量处理。spring-doc.cadn.net.cn

B.3. 扩展应用类路径

用户可能需要项目为现有的Stream应用添加依赖,或向Dataflow、Skipper或其他容器提供商添加特定的数据库驱动程序。spring-doc.cadn.net.cn

Spring Cloud Dataflow 仓库包含了帮助完成此任务的脚本。以下示例假设你已经克隆了Spring-cloud-dataflow仓库,正在执行从以下的脚本src/模板/附加工具.

B.3.1. 容器

为了向现有容器添加依赖,将采取以下步骤。spring-doc.cadn.net.cn

环境变量
例子
export CONTAINER_REPO="springcloud/spring-cloud-dataflow-server"
export CONTAINER_TAG="2.9.5-jdk17"
export PRIVATE_REGISTRY="our.private.registry"
export DEPS_FOLDER="./extra-libs/"
docker build -f Dockerfile -t "$PRIVATE_REGISTRY/$CONTAINER_REPO:$CONTAINER_TAG"
docker push "$PRIVATE_REGISTRY/$CONTAINER_REPO:$CONTAINER_TAG"
如上所述,Dockerfile生活Spring-cloud-dataflow存储库src/模板/附加工具.

B.3.2. JAR档案

使用CloudFoundry或本地部署时,你需要先更新jar,然后再发布到私有注册表或Maven Local。spring-doc.cadn.net.cn

示例

这个示例是添加依赖,然后将jar安装到Maven本地。spring-doc.cadn.net.cn

./gradlew -i publishToMavenLocal \
    -P appFolder="." \
    -P appGroup="org.springframework.cloud" \
    -P appName="spring-cloud-dataflow-server" \
    -P appVersion="2.9.5" \
    -P depFolder="./extra-libs"
使用该publishMavenPublicationToMavenRepository任务发布到远程仓库。更新gradle.properties带有远程仓库的详细信息。或者,换个地方repoUserrepoPassword到 ~/.gradle/gradle.properties

B.4. 为尚未支持的架构创建容器。

以 M1 上的 macOS 为例,amd64/x86_64 的性能是不可接受的。 我们提供了一套脚本,可用于下载特定版本的已发布工件。 我们还提供了一个脚本,利用下载的工件为主机平台创建一个容器。 在各种项目中,你会发现本地/本地当地文件夹。spring-doc.cadn.net.cn

项目 脚本 笔记

数据流spring-doc.cadn.net.cn

SRC/本地/download-apps.sh
SRC/本地/create-containers.sh
spring-doc.cadn.net.cn

下载或创建以下容器:Spring-cloud-dataflow-server,
Spring-cloud-dataflow-composed-task-runner,
Spring-cloud-dataflow-single-step-batch-job,
Spring-cloud-dataflow-tasklauncher-sink-kafka,
Spring-cloud-dataflow-tasklauncher-sink-rabbit
spring-doc.cadn.net.cn

船长spring-doc.cadn.net.cn

本地/download-app.sh
本地/create-container.shspring-doc.cadn.net.cn

下载或创建以下容器:Spring-cloud-skipper-serverspring-doc.cadn.net.cn

流应用spring-doc.cadn.net.cn

本地/download-apps.sh
本地/create-containers.sh
本地/pack-containers.shspring-doc.cadn.net.cn

create-containers.sh使用
pack-containers.sh使用spring-doc.cadn.net.cn

B.4.1. 书写系统Spring-cloud-dataflow

SRC/本地/download-apps.sh

下载所有需要的应用程序create-containers.sh来自Maven仓库。spring-doc.cadn.net.cn

如果快照的时间戳匹配,下载将被跳过。spring-doc.cadn.net.cn

用法:download-apps.sh [版本]spring-doc.cadn.net.cn

SRC/本地/create-containers.sh

创建所有容器并推送到本地 Docker 注册表。spring-doc.cadn.net.cn

用法:create-containers.sh [版本] [jre-version]spring-doc.cadn.net.cn

B.4.2. 书本春云跳者

本地/download-app.sh

下载所有需要的应用程序create-containers.sh来自Maven仓库。spring-doc.cadn.net.cn

如果快照的时间戳匹配,下载将被跳过。spring-doc.cadn.net.cn

用法:download-app.sh [版本]spring-doc.cadn.net.cn

本地/create-container.sh

创建所有容器并推送到本地 Docker 注册表。该脚本需要 jib-clispring-doc.cadn.net.cn

用法:create-containers.sh [版本] [jre-version]spring-doc.cadn.net.cn

B.4.3. 文字流式应用

本地/download-apps.sh

下载所有需要的应用程序create-containers.sh来自Maven仓库。spring-doc.cadn.net.cn

如果快照的时间戳匹配,下载将被跳过。spring-doc.cadn.net.cn

用法:download-apps.sh [版本] [经纪人] [筛选]spring-doc.cadn.net.cn

本地/create-containers.sh

创建所有容器并推送到本地 Docker 注册表。spring-doc.cadn.net.cn

用法:create-containers.sh [版本] [broker] [JRE-version] [筛选]spring-doc.cadn.net.cn

如果创建容器所需的文件不存在,脚本会跳过该容器。spring-doc.cadn.net.cn

本地/pack-containers.sh

创建所有容器并推送到本地 Docker 注册表。spring-doc.cadn.net.cn

用法:pack-containers.sh [版本] [broker] [jre-version] [filter]spring-doc.cadn.net.cn

如果没有创建容器所需的文件,脚本会跳过该文件。spring-doc.cadn.net.cn

如果提供了任何参数,那么它左侧的所有参数都应被视为必需。

B.5. 配置Kubernetes用于本地开发或测试

B.5.1. 前提条件

你需要安装kubectl,然后用kind或minikube来做本地集群。spring-doc.cadn.net.cn

所有示例都假设你已经克隆了Spring-cloud-dataflow仓库,正在执行从以下的脚本SRC/本地/K8s.spring-doc.cadn.net.cn

在macOS上你可能需要安装实行路径来自Macportsbrew安装 realpathspring-doc.cadn.net.cn

这些脚本需要一个类似的shellZSH并且应该能在Linux、WSL 2或macOS上运行。

B.5.2. 步骤

Kubernetes 提供商

我该如何在 minikube 和 kind 之间做出选择?Kind 通常比 Minikube 的设置和拆卸时间更快。在性能方面,除了部署 Minikube 时可以配置 CPU 和内存的限制外,两者之间几乎没有什么可挑剔的选择。所以如果你有内存限制或需要强制执行内存限制,Minikube 会是更好的选择。spring-doc.cadn.net.cn

库贝克特尔

你需要安装kubectl才能配置Kubernetes集群spring-doc.cadn.net.cn

Kind 是 Docker 中的 Kubernetes,非常适合本地开发。spring-doc.cadn.net.cn

负载均衡器将由configure-k8s.sh脚本 by 需要更新 yaml 文件,以提供负载均衡器可用的地址范围。spring-doc.cadn.net.cn

迷你库贝

Minikube 使用多种驱动程序之一来提供虚拟化环境。spring-doc.cadn.net.cn

如果你有现有的Minikube安装,请删除。minikube 删除

B.5.3. 集装箱制造与装载。

对于本地开发,你需要控制当地环境中使用的容器。spring-doc.cadn.net.cn

为了确保管理特定版本的数据流和跳跃容器,你可以设置SKIPPER_VERSION和DATAFLOW_VERSION环境变量,然后调用./pull-dataflow.sh./pull-skipper.sh或者如果你想使用本地构建的应用程序,也可以调用./build-skipper-image.sh./build-dataflow.shspring-doc.cadn.net.cn

B.5.4. 配置 k8s 环境

你可以调用以下脚本之一来选择你目标的安装类型:spring-doc.cadn.net.cn

use-kind.sh [<namespace>] [<database>] [<broker>]
use-mk-docker.sh [<namespace>] [<database>] [<broker>]
use-mk-kvm2.sh [<namespace>] [<database>] [<broker>]
use-mk.sh <driver> [<namespace>] [<database>] [<broker>] (1)
use-tmc.sh <cluster-name> [<namespace>] [<database>] [<broker>]
use-gke.sh <cluster-name> [<namespace>] [<database>] [<broker>]
1 <Drivers>必须是其中之一KVM2,Jetty工人,VMware,虚拟盒,VMwareFusion超级套件.Jetty工人是本地开发的推荐选项。
<命名空间>将会默认值如果没有提供。默认<数据库>PostgreSQL以及默认值<经纪人>卡 夫 卡.

由于这些脚本导出环境变量,需要像以下示例那样执行:spring-doc.cadn.net.cn

source ./use-mk-docker.sh test-ns postgresql rabbitmq
TMC 或 GKE 云集群

集群必须在使用前存在,执行前应使用相关的CLI登录来源:./use-gke.shspring-doc.cadn.net.cn

创建本地集群。

以下脚本将创建本地集群。spring-doc.cadn.net.cn

./configure-k8s.sh
  • 对于类型,请按照指示进行更新src/local/k8s/yaml/metallb-configmap.yaml然后用kubectl apply -f src/local/k8s/yaml/metallb-configmap.yamlspring-doc.cadn.net.cn

  • 对于minikube,发射一个新壳并执行迷你立方隧道spring-doc.cadn.net.cn

部署 Spring Cloud 数据流。
配置代理
export BROKER=<broker> (1)
1 <经纪人>其中之一卡 夫 卡兔子咪Q
配置数据库
export DATABASE=<database> (1)
1 <数据库>玛利亚德PostgreSQL
这仍然是可选的,PostgreSQL支持还没有,但很快会跟上。
./install-scdf.sh
source ./export-dataflow-ip.sh
从集群中删除部署。
./delete-scdf.sh
删除集群

如果你配置了TMC集群,这个脚本也会删除。spring-doc.cadn.net.cn

./destroy-k8s.sh

B.5.5. 公用设施

以下Utilities列表可能对你有帮助。spring-doc.cadn.net.cn

名称 描述

警犬spring-doc.cadn.net.cn

k9s 是一款基于文本的显示器,用于探索 Kubernetes 集群。spring-doc.cadn.net.cn

凯尔spring-doc.cadn.net.cn

根据不同的命名标准,额外和尾随各群的日志。spring-doc.cadn.net.cn

凯尔
kail --label=spring-group-id=<stream-name>
kail --ns=<namespace>

B.5.6. 文字

有些脚本也适用于本地容器,可以在本地/本地,Kubernetes 专用脚本 在SRC/本地/K8sspring-doc.cadn.net.cn

脚本 描述

build-app-images.shspring-doc.cadn.net.cn

构建所有餐厅示例流应用的图片spring-doc.cadn.net.cn

pull-app-images.shspring-doc.cadn.net.cn

从Docker Hub拉取所有餐厅示例流应用的图片spring-doc.cadn.net.cn

pull-dataflow.shspring-doc.cadn.net.cn

基于DATAFLOW_VERSION.spring-doc.cadn.net.cn

pull-scdf-pro.shspring-doc.cadn.net.cn

基于 Tanzu Network 从 Tanzu Network 中拉取 Dataflow ProSCDF_PRO_VERSION.spring-doc.cadn.net.cn

pull-skipper.shspring-doc.cadn.net.cn

从 DockerHub 底下拉取 SkipperSKIPPER_VERSION.spring-doc.cadn.net.cn

build-dataflow-image.shspring-doc.cadn.net.cn

从本地 Dataflow 仓库构建一个 Docker 镜像spring-doc.cadn.net.cn

build-scdf-pro-image.shspring-doc.cadn.net.cn

从 Dataflow Pro 的本地仓库构建一个 Docker 镜像。SetUSE_PRO=真在环境中使用 Dataflow Prospring-doc.cadn.net.cn

build-skipper-image.shspring-doc.cadn.net.cn

从本地 Skipper 仓库构建一个 docker 镜像。spring-doc.cadn.net.cn

configure-k8s.shspring-doc.cadn.net.cn

根据你的 K8S_DRIVER 配置配置 Kubernetes 环境。spring-doc.cadn.net.cn

delete-scdf.shspring-doc.cadn.net.cn

删除部署创建的所有 Kubernetes 资源。spring-doc.cadn.net.cn

destroy-k8s.shspring-doc.cadn.net.cn

删除集群、类型或小库布。spring-doc.cadn.net.cn

export-dataflow-ip.shspring-doc.cadn.net.cn

导出数据流服务器的网址为DATAFLOW_IPspring-doc.cadn.net.cn

export-http-url.shspring-doc.cadn.net.cn

将特定流程的HTTP源代码以名称导出为HTTP_APP_URLspring-doc.cadn.net.cn

install-scdf.shspring-doc.cadn.net.cn

配置并部署所有Spring Cloud数据流的容器spring-doc.cadn.net.cn

load-images.shspring-doc.cadn.net.cn

将测试中要求的所有容器镜像加载到Kind或Minikube中,以确保你能控制所用内容。spring-doc.cadn.net.cn

load-image.shspring-doc.cadn.net.cn

将特定的容器图片加载到本地类型或 minikube 中。spring-doc.cadn.net.cn

local-k8s-acceptance-tests.shspring-doc.cadn.net.cn

对集群执行验收测试,其中DATAFLOW_IP是指向的。spring-doc.cadn.net.cn

register-apps.shspring-doc.cadn.net.cn

注册单元测试中使用的任务和流应用。spring-doc.cadn.net.cn

请报告脚本错误及相关环境的详细信息。

B.6. 常见问题解答

在本节中,我们将回顾春季云数据流的常见问题解答。 更多信息请参见微型网站的常见问题部分。spring-doc.cadn.net.cn