我在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={}}
答案 0 :(得分:2)
在开始之前,您有很多问题。将来,最好将它们分解为多个问题,以便其他用户更容易找到并更容易回答。话虽如此:
关于当前事态的一点背景
为了理解事物的运作方式,了解事物的现状非常重要。所涉软件的当前版本是:
目前,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
。他们发布了。不同之处在于,在创建任务定义时,在单击启动之前不会部署任何内容。当任务完成时,软件将被关闭并清理。因此,虽然流定义可能具有状态,但它实际上是定义与已部署软件之间的一对一关系。在任务中,您可以根据需要多次启动任务定义。
您的问题
阅读你的帖子,我看到你正在努力的一些事情。让我看看我是否可以提供帮助:
TaskLauchRequest
内。 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 :(得分:0)
在SCDF的CF服务器的1.0.0.M4版本中,不可以使用任务支持。在此版本中,应禁用任务命令/ REST-API - 请参阅here。因此,您无法在1.0.0.M4 reference guide中看到与任务相关的任何文档。
也就是说,BUILD-SNAPSHOT版本中的任务支持 可用/启用。如果您在本地构建CF服务器并将其推送到CF,则可以利用shell中的任务命令来创建和启动任务定义。