无法从Spring云数据流中启动任务

时间:2016-08-10 21:09:16

标签: cloudfoundry spring-cloud-dataflow spring-cloud-task

我在Spring Cloud Data Flow中注册了我的任务应用程序,为其创建了一个定义,状态显示为“未知”。我创建了流并尝试通过任务接收器启动任务,我收到一个错误:

java.lang.IllegalStateException: failed to resolve MavenResource:

如何从任务接收器启动任务?我错过了什么吗?任何帮助表示赞赏。我的另一个问题是如何在我的任务中访问通过TaskLaunchRequest发送的有效负载? S1 http | step1:变压器兔|日志 S2:S1.step1> filter --expression = payload.contains(' CUSTADDRMODRQ_V15')|任务处理器|任务 - 汇

task-sink是在TaskLaunchRequest中启动uri提供的任务。它正在查找日志中显示的资源 OUT使用管理器EnhancedLocalRepositoryManager优先级为/home/vcap/.m2/repository OUT使用优先级为5.0 https://repo.spring.io/libs-snapshot的运输车HttpTransporter,最后失败。

任务部署在我们的存储库中,如上所述,我也注册并为其创建了定义。

这个是在cf环境中我正在使用SCDF服务器1.0.0.M4。 在任务接收器的application.properties中,我提供了maven.remote.repositories.snapshots.url = **

任务创建fis-ifx-event-task --definition" fis-event-task"

我的目标是从流中启动任务。

感谢您提供的信息。我实际上使用BUILD-SNAPSHOT,因为我无法在1.0.0M4版本中启用taks。这是我使用spring-cloud-dataflow-server-cloudfoundry-1.0.0.BUILD-20160808.144306-116的那个。我能够注册和创建任务定义。任务定义的状态显示为' unknown'即使我正在使用您团队提供的示例任务模块。但是当我启动流的流程并且当任务接收器尝试启动任务时,它无法找到maven资源。当我创建任务定义时,是否部署了任务模块?我在Pivotal Apps Manager中看不到任何应用。如前所述,我在application.properties文件中为任务接收器应用程序提供了maven.remote.repositories.snapshot.url。我观察到的另一件事是,当我从dataflow shell手动启动任务时,它会给出错误CF-UnprocessableEntity(10008):请求在语义上无效:未知字段:' staging_disk_in_mb',' staging_memory_in_mb'还有一条消息说“来源是空的”#39;目前,任务应该打印时间戳,而不依赖于任何输入。

TaskProcessor code:
@EnableBinding(Processor.class)
@EnableConfigurationProperties(TaskProcessorProperties.class)
public class TaskProcessor {

    @Autowired
    private TaskProcessorProperties processorProperties;

    public TaskProcessor() {
    }

    @Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT)
    @ELI(level = "info", eventType = ELIEventType.INBOUND)
    public Object setupRequest(String message) {
        Map<String, String> properties = new HashMap<String, String>();
        properties.put("payload", message);
        TaskLaunchRequest request = new TaskLaunchRequest(processorProperties.getUri(), null, properties, null);
        return new GenericMessage<>(request);
    }
}
TaskSink code:
@SpringBootApplication
@EnableTaskLauncher
@EnableBinding(Sink.class)
@EnableConfigurationProperties(TaskSinkProperties.class)
public class FisIfxEventTaskSinkApplication {

    public static void main(String[] args) {
        SpringApplication.run(FisIfxEventTaskSinkApplication.class, args);
    }
}

我提供了我之前在帖子中使用的流。接收器正在接收带有uri和有效负载的TaskLaunchRequest,如此处所示,无法启动任务。

OUT registering [40, java.io.File] with serializer org.springframework.integration.codec.kryo.FileSerializer
2016-08-10T16:08:55.02-0600 [APP/0]      
OUT Launching Task for the following resource TaskLaunchRequest{uri='maven://com.xxx:fis.ifx.event-task:jar:1.0-SNAPSHOT', commandlineArguments=[], environmentProperties={payload={"statusCode":0,"fisT
opic":"CustomerDataUpdated","payloadId":"CUSTADDRMODR``Q_V15","customerIds":[1597304]}}, deploymentProperties={}}

2 个答案:

答案 0 :(得分:2)

在开始之前,您有很多问题。将来,最好将它们分解为多个问题,以便其他用户更容易找到并更容易回答。话虽如此:

关于当前事态的一点背景
为了理解事物的运作方式,了解事物的现状非常重要。所涉软件的当前版本是:

  • Pivotal Cloud Foundry(PCF) - 1.7.12。任何任务支持都需要此版本。
  • Spring Cloud Task(SCT) - 1.0.2.RELEASE
  • Spring Cloud数据流CF(SCDF) - 1.0.0.BUILD-SNAPSHOT(截至本文发布之日的当前日期)。

目前,PCF 1.7.12+具备运行任务的所有功能。您可以创建v3应用程序(用于启动任务的应用程序类型),将其作为任务运行等。但是,围绕该功能的工具目前尚未完成。在Apps Manager或CLI中不支持v3应用程序。有一个CLI插件,它更像是一个开发工具,可用于帮助某些功能(它会显示日志等),但它不是完全正常运行,需要特定版本的CLI才能工作[ 1]。这是PCF中的任务功能仍被认为是实验性的原因之一。

Spring Cloud Task目前是GA,支持在CF上有效运行任务所需的所有功能。但是,重要的是要注意SCT不处理编排,因此在CF上实际启动任务是用户或Spring Cloud数据流(更简单的路径)的责任。

Spring Cloud Data Flow的Cloud Foundry服务器实现目前具有在最新快照中在PCF上启动任务的功能。我们已经针对1.7.12以及1.8的开发分支验证了这一点。

SCDF中的任务工作流程
任务与SCDF环境中的流应用程序根本不同。创建流定义时,您可以选择deploy它。它的作用是它实际下载SpringBootüberjars并将它们部署到PCF作为长时间运行的进程。如果它们失效,PCF会按预期重新启动它们等等。

另一方面,任务不是deployed。他们发布了。不同之处在于,在创建任务定义时,在单击启动之前不会部署任何内容。当任务完成时,软件将被关闭并清理。因此,虽然流定义可能具有状态,但它实际上是定义与已部署软件之间的一对一关系。在任务中,您可以根据需要多次启动任务定义。

您的问题
阅读你的帖子,我看到你正在努力的一些事情。让我看看我是否可以提供帮助:

  • SCDF中的任务定义并通过流启动它们从流中启动任务时,不使用SCDF中的任务注册表。接收器期望资源的URL在TaskLauchRequest内。
  • Apps Manager和任务 - 如上所述,Apps Manager中不支持v3应用程序,因此您将无法在那里看到您的任务。
  • 查看日志 - 为了调试在CF上启动任务出了什么问题,您将需要查看日志。为此,请使用上面提到的v3 CLI插件来查看它们。重要的是要注意,您只能使用插件拖放实时日志,而不是查看先前已呈现的日志。因此,在测试时,您需要在应用创建之前立即拖动日志,然后再启动。
  • SCDF Shell中的错误 - 您从SCDF shell(CF-UnprocessableEntity(10008):...)收到的错误让我想知道您是否同时拥有正确版本的PCF(1.7.12+)和以下其他库的正确版本:
    • spring-cloud-deployer-cloudfoundry - 最新快照
    • cf-java-client - 2.0.0.M10 +
    • reactor-core - 3.0.0.RC1 +

我希望这有帮助!

[1] https://github.com/cloudfoundry/v3-cli-plugin

答案 1 :(得分:0)

在SCDF的CF服务器的1.0.0.M4版本中,可以使用任务支持。在此版本中,应禁用任务命令/ REST-API - 请参阅here。因此,您无法在1.0.0.M4 reference guide中看到与任务相关的任何文档。

也就是说,BUILD-SNAPSHOT版本中的任务支持 可用/启用。如果您在本地构建CF服务器并将其推送到CF,则可以利用shell中的任务命令来创建和启动任务定义。