【问题标题】:Camel keep sending messages to queue via JMS after 1 minute骆驼在 1 分钟后继续通过 JMS 向队列发送消息
【发布时间】:2017-02-02 08:26:57
【问题描述】:

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

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

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

from("timer://foo?fixedRate=true&period=60000")
.to("customLogic")
.to("jms:myqueue")
  1. 计时器将在一分钟后启动。
  2. 自定义逻辑将执行数据库查找并创建消息
  3. 最后发送到 jms 队列

我对 Camel 很陌生,所以一些代码会很有帮助,谢谢

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

【问题讨论】:

  • 你有什么问题?你所拥有的就是正确的道路。
  • 如果您想在那里获得一些帮助,请在您的问题中添加一些详细信息,例如:我想要 A、B、C 我已经尝试过 X 和 Y,但它不起作用等等。
  • Strelok 和 Vyacheslav 我在问题中添加了更多细节

标签: scala apache-camel jms activemq


【解决方案1】:

我猜您的问题是关于如何将自定义 Java 逻辑挂接到您的骆驼路由中以准备 JMS 消息有效负载。

JMS 组件将使用交换主体作为 JMS 消息负载,因此您需要在自定义逻辑中设置主体。有几种方法可以做到这一点。

您可以通过实现org.apache.camel.Processor 接口并在交换中显式设置新主体来创建custom 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 组件的交换上的新主体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2015-08-25
    • 2015-05-10
    • 2015-12-03
    • 2017-04-27
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多