2015-02-05 20 views
0

我能收到我的春节,XD的工作预先定义的作业执行事件如下:春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

为自定义事件创建一个新的水龙头并不容易(您需要一个插件将其绑定到总线上)。

但是,您可以轻松地将侦听程序添加到作业配置中,并将事件发布到聚合事件通道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/>(但不要使用基于总线的队列)将您的监听器发布到XD基础结构之外的兔子。

编辑回应您的评论如下。

我刚刚用Spring XD 1.1.0.RELEASE试了一下没有问题。

我加入这个

<int:inbound-channel-adapter expression="'foo'" channel="xd.job.aggregatedEvents"> 
    <int:poller fixed-delay="5000"/> 
</int:inbound-channel-adapter> 

timestampfile文件作业(添加INT命名空间太)。

这会将文字foo发送到聚合事件通道。

那么我这样做...

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 
+0

谢谢回答这么快,第一位正是我需要的。 – Stuart 2015-02-05 17:40:10

+0

嗨加里,我想添加一个侦听器,将事件发布到聚合事件通道bean。但是,我得到NoSuchBeanDefinitionException,因为我在xml配置中引用了xd.job.aggregatedEvents。这与这个问题的描述非常相似:http://forum.spring.io/forum/spring-projects/xd/747039-inject-a-reference-to-the-notifications-message-channel-in-batch-监听器。你介意发布添加发布到聚集事件的侦听器的配置吗? – Stuart 2015-02-23 15:53:25

+0

谢谢加里。我意识到我的问题不是作业xml配置,而是测试xml配置。通道xd.job.AggregatedEvents存在于作业运行的spring xd容器中,但我的junit测试在此之外运行。要修复测试,我必须在我的测试xml配置中添加和配置相同名称的通道。 – Stuart 2015-02-24 16:28:09