我可以接收我的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中执行此操作的最佳方法是什么?
答案 0 :(得分:1)
为自定义事件创建新的点击并不是那么容易(您需要一个插件将其绑定到总线)。
但是,您可以轻松地将侦听器添加到作业配置中,并将事件发布到聚合事件通道bean。
只有您的活动(以及您启用的任何其他活动)才会转到聚合活动频道。
如果您想探索添加自己的点击,请参阅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}}