我构建了一个以sftp-dataflow作为源(sftp-dataflow-source-kafka:2.1.1.RELEASE)的流,该流与task-launcher-dataflow(task-launcher-dataflow-sink-kafka:1.0.2)连接。释放)作为水槽。目标是启动一项春季任务。
我的SCDF平台包含:Skipper-server版本2.3.0,dataflow-server 2.4.0和kafka部署为dockers。
sftp源向任务启动器发送消息,并且启动器有异常:
无法实例化 [org.springframework.cloud.dataflow.rest.client.DataFlowOperations]: 工厂方法“ dataFlowOperations”抛出异常;嵌套异常 是java.lang.IllegalStateException:数据流的不兼容版本 服务器已检测。
我所有的组件都是最新版本。
要创建,可以流式播放:
stream create testStreamSftpDataflowlaunch1 --definition "sftp-dataflow --local-dir=/tmp/local-files1 --remote-dir=/data/docker/containers/SCDF/dockerSCDF/tmp/remote-files1 --password=docker* --allow-unknown-keys=true --username=docker --host=slnxdalicrprp03.mano.es.sopra --task-name=batchEODTask --logging.level.org.springframework.integration=DEBUG --task.launch.request.taskName=batchEODTask | task-launcher-dataflow --server-uri=http://slnxdalicrprp03******:57102" (skipper-server;port)
我不明白,启动器如何执行任务,这是因为任务名称没有通过消息传递给启动器。例如,我们有文件名和其他属性
消息:GenericMessage [有效载荷= / tmp / local-files1 / FMO.txt, 标头= {file_originalFile = / tmp / local-files1 / FMO.txt, id = 7447a3ab-cd0e-17c2-181d-7b0f5cb85d78,file_name = FMO.txt, file_relativePath = FMO.txt,时间戳= 1582106812595}] 2020-02-19 10:06:52.961 DEBUG 233 --- [ask-scheduler-1] o.s.i.e.SourcePollingChannelAdapter:轮询导致出现消息: GenericMessage [有效负载= / tmp / local-files1 / FMO2.txt, 标头= {file_originalFile = / tmp / local-files1 / FMO2.txt, id = b0fc3c02-a3e2-2481-aa5b-68f9db6b6973,file_name = FMO2.txt, file_relativePath = FMO2.txt,时间戳= 1582106812961}] 2020-02-19 10:06:52.962 DEBUG 233 --- [ask-scheduler-1] o.s.integration.channel.DirectChannel:在频道上预先发送 'taskLaunchRequestChannel',
当我使用ingestFile在文档中启动SCDF示例时,我们遇到了同样的问题。
你有个主意吗?
答案 0 :(得分:0)
这篇文章有很多内容。我将尝试在这里拆开一些东西。
sftp源向任务启动器发送消息,启动器有一个异常:无法实例化[org.springframework.cloud.dataflow.rest.client.DataFlowOperations]:工厂方法'dataFlowOperations'抛出异常;嵌套的异常是java.lang.IllegalStateException:检测到不兼容的Data Flow Server版本。
似乎TL-Dataflow接收器与相当旧的SCDF客户端库捆绑在一起-请参见tasklauncher-dataflow-app-dependencies/pom.xml#L20。您可以将版本更新为2.4.0.RELEASE(与已经运行的SCDF相同),build the app以及用于测试/使用的本地docker映像。
我不明白,启动器如何执行任务,这是因为任务名称没有通过消息传递给启动器。
如果您关注TL-Dataflow文档,您会注意到input(又称有效载荷)被接受为具有某些键/值对的JSON。 Students
是关键位。它是SCDF中已经存在的任务定义的名称。我们有一个end-to-end recipe可以完整浏览用例,您可以将其用作参考并遵循。
最近,我们还添加了增强功能以自动创建任务定义(如果没有)。 name
必须与应用程序注册表中的现有任务应用程序名称匹配-请参阅spring-cloud-stream-app-starters/tasklauncher-dataflow#24。
我相信这涵盖了这篇文章中的紧迫问题。