Spring XD自定义作业执行事件

时间:2015-02-05 16:09:03

标签: spring-xd

我可以接收我的spring xd作业的预定义作业执行事件,如下所示:

xd>job create --name myHttpJob --definition "httpJob" --deploy
xd>stream create --name jobExecutionEvents --definition "tap:job:myHttpJob.job >log" --deploy

参考:http://docs.spring.io/spring-xd/docs/1.0.3.RELEASE/reference/html/#_retrieve_job_notifications

但是,我想发布自己的自定义事件,并能够用它做一些事情。因此,可以创建一个我自己的自定义jobExecution事件并发布它或创建一个全新的自定义事件和新的侦听器。我找不到最佳方法,我的问题是在Spring XD中执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

为自定义事件创建新的点击并不是那么容易(您需要一个插件将其绑定到总线)。

但是,您可以轻松地将侦听器添加到作业配置中,并将事件发布到聚合事件通道bean。

请参阅https://github.com/spring-projects/spring-xd/blob/master/spring-xd-dirt/src/main/resources/META-INF/spring-xd/plugins/job/job-module-beans.xml

只有您的活动(以及您启用的任何其他活动)才会转到聚合活动频道。

如果您想探索添加自己的点击,请参阅https://github.com/spring-projects/spring-xd/blob/master/spring-xd-dirt/src/main/java/org/springframework/xd/dirt/plugins/job/JobEventsListenerPlugin.java了解标准频道如何绑定到总线。

当然,您可以随时通过<int-amqp:outbound-channel-adapter/>内的<int:inbound-channel-adapter expression="'foo'" channel="xd.job.aggregatedEvents"> <int:poller fixed-delay="5000"/> </int:inbound-channel-adapter> 将您的听众发布到XD基础架构之外的兔子 工作配置(但不要使用基于总线的队列)。

编辑以回复您的评论。

我刚刚尝试使用Spring XD 1.1.0.RELEASE而没有任何问题。

我添加了这个

timestampfile

foo文件作业(也添加了int名称空间)。

这会将文字xd:>job create --name jobxxx --definition timestampfile Successfully created job 'jobxxx' xd:>job deploy jobxxx Deployed job 'jobxxx' xd:>stream create foo --definition "tap:job:jobxxx > log" --deploy Created and deployed new stream 'foo' 发送到聚合事件频道。

然后我做了这个......

18:29:13,392  INFO xdbus.tap:job:jobxxx.a1de5739-4399-4186-94de-33c5290a8411-1 sink.foo - foo
18:29:18,388  INFO xdbus.tap:job:jobxxx.a1de5739-4399-4186-94de-33c5290a8411-1 sink.foo - foo
18:29:23,390  INFO xdbus.tap:job:jobxxx.a1de5739-4399-4186-94de-33c5290a8411-1 sink.foo - foo
18:29:28,390  INFO xdbus.tap:job:jobxxx.a1de5739-4399-4186-94de-33c5290a8411-1 sink.foo - foo

......并在控制台上看到了这个......

{{1}}