0

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

java.lang.IllegalStateException: failed to resolve MavenResource:

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

task-sink 正在启动 TaskLaunchRequest 中 uri 提供的任务。它正在寻找资源,如日志中所示 OUT 使用管理器 EnhancedLocalRepositoryManager 优先级 10.0 用于 /home/vcap/.m2/repository OUT 使用传输器 HttpTransporter 优先级 5.0 用于https://repo.spring.io/libs-snapshot和终于失败了。

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

这是在 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。我能够注册和创建任务定义。即使我使用您团队提供的示例任务模块,任务定义的状态也显示为“未知”。但是当我启动流的流程并且当 task-sink 尝试启动任务时,它无法找到 maven 资源。创建任务定义时,是否部署了任务模块?我在 Pivotal Apps Manager 中看不到任何应用程序。如前所述,我在 application.properties 文件中为 task-sink 应用程序提供了 maven.remote.repositories.snapshot.url。我观察到的另一件事是,当我从数据流 shell 手动启动任务时,它会给出错误 CF-UnprocessableEntity(10008): The request is semantically invalid: Unknown field(s): 'staging_disk_in_mb', 'staging_memory_in_mb' 还有一条消息说'源为空'。目前该任务应该打印时间戳并且不依赖于任何输入。

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);
    }
}

我在帖子前面提供了我正在使用的流。如您在此处看到的,Sink 正在接收带有 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={}}
4

2 回答 2

2

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

关于当前事物状态的一些背景信息
为了了解事物将如何工作,了解事物的当前状态很重要。涉及的软件的当前版本是:

  • Pivotal Cloud Foundry (PCF) - 1.7.12。任何任务支持都需要此版本。
  • Spring Cloud 任务 (SCT) - 1.0.2.RELEASE
  • Spring Cloud Data Flow 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 Data Flow(更简单的路线)的责任。

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

SCDF
任务中的任务工作流与 SCDF 上下文中的流应用程序根本不同。创建流定义时,您可以选择deploy它。这实际上是下载 Spring Boot über jars 并将它们作为长时间运行的进程部署到 PCF。如果它们出现故障,PCF 将按预期重新启动它们,等等。

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

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

  • SCDF 中的任务定义并通过流启动它们 -从流启动任务时,不使用 SCDF 中的任务注册表。接收器期望资源的 URL 在TaskLauchRequest.
  • 应用程序管理器和任务 -如上所述,应用程序管理器中尚不支持 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

于 2016-08-11T17:23:28.697 回答
0

任务支持在 SCDF 的 CF 服务器的 1.0.0.M4 版本中不可用。在此版本中,应禁用任务命令/REST-API - 请参见此处。因此,您不会在 1.0.0.M4参考指南中看到任何与任务相关的文档。

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

于 2016-08-11T13:39:29.920 回答