1

我正在尝试使用 Camel 的 XML 构建一个有点花哨的 Camel 路线<camelContext>

我有两个 ActiveMQ 队列toProcessready一个 MySQL 数据库。数据库有一个如下所示的widgets表:

widget_id | widget_name | widget_value
(INT)       (VARCHAR 50)  (INT)

外部进程将原始字符串消息放在toProcess队列中。这些消息是简单的字符串,例如:

  • 嘶嘶
  • 嗡嗡声

等我想toProcess每 5 分钟轮询一次这个队列(使用 Camel-Quartz),并将在这些消费消息(fizz、buzz 等)的正文中找到的字符串合并到一个 JDBC语句中,该SELECT语句查找任何匹配字符串(例如作为嘶嘶声或嗡嗡声)。widgetswidget_name

然后,我想widget获取从 JDBC 调用中检索到的每条记录并将其放入ready队列中。最后,一个Burninatorbean 应该使用ready每个WidgetPOJO 并将其传递给它的Burninator#burninate(Widget)方法。

回顾一下:

  1. toProcess外部进程在队列中放置一个字符串,例如“fizz”
  2. Camel-Quartz 作业每 5 分钟触发一次,并出列“嘶嘶声”(以及任何其他)
  3. Camel-JDBC SELECT * FROM widgets WHERE widget_name = 'fizz'--> 我怀疑我需要 XPath
  4. 假设widget查询返回 25 条记录
  5. 所有 25 个都被序列化(二进制/JSON/XML?)并放在ready队列中
  6. 一个接一个,Burninator#burninate(Widget)出队ready并与下一个出队的小部件一起执行

这是我到目前为止所得到的,但我知道这是错误的:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <package>com.myapp.bus</package>
    <template id="camelTemplate"/>
    <route>
        <from uri="quartz://toProcessPollerJob?cron=*+5+*+*+*+?"/>
        <to uri="activemq:toProcess"/>
        <setBody>
            <constant>
                SELECT
                    *
                FROM
                    widgets
                WHERE
                    widget_name = ??? (e.g., fizz, buzz)
            </constant>
        </setBody>
        <marshall>
            <serialization/>
        </marshall>
        <to uri="activemq:ready"/>
        <unmarshall>
            <serialization/>
        </unmarshall>
        <to uri="bean:burninator?method=burninate"/>
    </route>
</camelContext>

任何骆驼巫师都可以在这里为我指明正确的方向(除了参考我应该阅读的骆驼行动中的章节;-))。具体来说,我遇到了麻烦:

  • 使用适当的字符串值参数化 JDBC SQLwidget_name
  • 将 JDBC SQL 返回的任何内容序列化为可以发送到ready队列的内容
  • 将队列上的消息反序列ready化为 Java WidgetPOJO

提前致谢。

4

1 回答 1

0

您需要使用一些其他语言而不是常量,因为那只是一个常量。例如简单的、groovy 甚至像velocity 等模板语言。您可以在其中创建要使用的SQL。

尝试

<simple>
            SELECT
                *
            FROM
                widgets
            WHERE
                widget_name = '${body}'
</simple>

你能在这里看到支持的语言吗 http://camel.apache.org/languages

或者使用 Velocity 或 Freemarker 等模板框架根据模板文件生成 SQL。

于 2012-12-05T08:11:05.593 回答