我目前正在学习Camel,我不确定是否可以按照固定的时间间隔从camel发送消息到activemq队列/主题。
目前我已经在Scala中创建了代码,它会查找数据库并创建一条消息并在每分钟后将它发送到队列中。我们可以在驼峰中执行此操作。
我们在camel中有一个计时器组件,但它不会产生消息。我在想这样的事情。
from("timer://foo?fixedRate=true&period=60000")
.to("customLogic")
.to("jms:myqueue")
我是Camel的新手,所以有些代码非常有用,谢谢
您能否指点我如何创建这种可以创建消息并将其传递给下一个"。(" jms:myqueue")"的customeLogic方法。是否有一些需要继承/实现的类将传递消息等。
答案 0 :(得分:1)
我猜您的问题是如何将自定义Java逻辑挂钩到您的camel路由以准备JMS消息有效负载。
JMS组件将使用交换体作为JMS消息有效负载,因此您需要在自定义逻辑中设置主体。有几种方法可以做到这一点。
您可以通过实施custom processor界面并在交易所明确设置新主体来创建org.apache.camel.Processor:
Processor customLogicProcessor = new Processor() {
@Override
public void process(Exchange exchange) {
// do your db lookup, etc.
String myMessage = ...
exchange.getIn().setBody(myMessage);
}
};
from("timer://foo?fixedRate=true&period=60000")
.process(customLogicProcessor)
.to("jms:myqueue");
更优雅的选择是使用Camel's bean binding:
public class CustomLogic {
@Handler
public String doStuff() {
// do your db lookup, etc.
String myMessage = ...
return myMessage;
}
}
[...]
CustomLogic customLogicBean = new CustomLogic();
from("timer://foo?fixedRate=true&period=60000")
.bean(customLogicBean)
.to("jms:myqueue");
@Handler注释告诉Camel它应该调用哪个方法。如果只有一种限定方法,则不需要该注释。 Camel使得方法的结果调用将在传递给JMS组件的交换上的新主体。