简单的问题我猜,但我还没找到答案。
骆驼很新,我正在尝试使用'最佳实践',因此我 “在Spring中启动CamelContext并在Java DSL RouteBuilders中编写路由规则”。
所以我有:
ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/camel-context.xml");
我现在正在尝试使用NotifyBuilder:
NotifyBuilder notify = new NotifyBuilder().whenDone(1).create();
NotifyBuilder需要参数中的上下文,但不接受'Application context'或cast()。 我试着将getContext()作为参数,然后是我的布尔值:
boolean done = notify.matches(10, TimeUnit.SECONDS);
总是假的......
那么我如何使用NotifyBuilder和Spring定义上下文呢? 非常感谢你的时间。
答案 0 :(得分:0)
您可以使用标准的spring api来使用getBean api
获取camel上下文的长篇大论
CamelContext camel = context.getBean("idOfCamelContext", CamelContext.class);
例如,检查ApplicationContext
如果您使用<camelContext>
<camelContext id="idOfCamelContext" ...>
答案 1 :(得分:0)
在发送正文之前创建NotifyBuilder
实例:
CamelContext camelContext = ...
ProducerTemplate template = ...
NotifyBuilder notifyBefore = new NotifyBuilder(camelContext)
.from("direct:start").whenDone(1)
.create();
template.sendBody("direct:start", "Wow!!!!");
NotifyBuilder notifyAfter = new NotifyBuilder(camelContext)
.from("direct:start").whenDone(1)
.create();
LOG.info("done (before) = {}", notifyBefore.matches(1, TimeUnit.SECONDS));
LOG.info("done (after) = {}", notifyAfter.matches(1, TimeUnit.SECONDS));
打印:
INFO done (before) = true
INFO done (after) = false
答案 2 :(得分:0)
非常感谢回复家伙们。我很惭愧要求更多,但我显然错过了一些东西。
我正在使用
运行我的应用程序camel:run
作为maven的目标。如果我做对了,它会从我的“META-INF / spring / camel-context.xml”文件中自动启动驼峰上下文。
所以这一行:
ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/camel-context.xml");
没用,因为程序从未进入主程序。 得到之后,我试着:
-Apply Claus回答获取我的ApplicationContext上下文,然后使用
设置常规CamelContextCamelContext camel = context.getBean("idOfCamelContext", CamelContext.class);
在另一个bean文件或路由中。当我这样做时,ClassPathXmlApplicationContext会不断刷新,一遍又一遍,之后什么也没发生。
- 用
改变我的mvn目标compile exec:java -Dexec.mainClass=com.blabla.MyMain
然后使用id技巧在我的main方法applicationContext和camelContext中设置。 但是路由是在设置camelContext之前启动的,我仍然不能使用notifyBuilder(camelContext),因为那时它是null。所以我现在无法测试彼得的答案。
如果这是一个愚蠢的问题,我很抱歉:-)。我可以使用完整的JavaDSL,但我真的不知道Spring是如何运行的。 (非真正相关,但我甚至无法控制如何使用Spring启动和停止上下文,而在纯JavaDSL中我们可以这样做):
context.start()
thread.sleep(10000)
context.stop()
再次感谢您的时间。