1分钟后,Camel继续通过JMS将消息发送到队列

时间:2017-01-31 22:50:00

标签: scala apache-camel jms activemq

我目前正在学习Camel,我不确定是否可以按照固定的时间间隔从camel发送消息到activemq队列/主题。

目前我已经在Scala中创建了代码,它会查找数据库并创建一条消息并在每分钟后将它发送到队列中。我们可以在驼峰中执行此操作。

我们在camel中有一个计时器组件,但它不会产生消息。我在想这样的事情。

from("timer://foo?fixedRate=true&period=60000")
.to("customLogic")
.to("jms:myqueue")
  1. 计时器将在一分钟后启动。
  2. 自定义逻辑将执行数据库查找并创建消息
  3. 最后发送到jms队列
  4. 我是Camel的新手,所以有些代码非常有用,谢谢

    您能否指点我如何创建这种可以创建消息并将其传递给下一个"。(" jms:myqueue")"的customeLogic方法。是否有一些需要继承/实现的类将传递消息等。

1 个答案:

答案 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组件的交换上的新主体。