我正在尝试使用Camel的XML <camelContext>
构建一个有点花哨的Camel路由。
我有两个ActiveMQ队列,toProcess
和ready
,以及一个MySQL数据库。数据库有一个widgets
表,如下所示:
widget_id | widget_name | widget_value
(INT) (VARCHAR 50) (INT)
外部进程将原始String消息放在toProcess
队列上。这些消息是简单的字符串,例如:
等。我想每5分钟轮询一次toProcess
队列(使用Camel-Quartz)并在JDBC SELECT
语句中包含这些消息(fizz,buzz等)的主体中的字符串。查找widgets
匹配字符串的任何widget_name
(例如fizz或buzz)。
然后,我想从JDBC调用中获取每个widget
记录并将其放在ready
队列中。最后,Burninator
bean应该使用ready
,并将每个Widget
POJO传递给其Burninator#burninate(Widget)
方法。
所以回顾一下:
toProcess
队列SELECT * FROM widgets WHERE widget_name = 'fizz'
- &gt;我怀疑我需要XPath widget
条记录
ready
队列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>
任何Camel巫师都可以指出我在正确的方向(除了参考 Camel in Action 中我应该阅读的章节;-))。特别是我遇到了麻烦:
widget_name
ready
队列ready
队列上的消息反序列化为Java Widget
POJO 提前致谢。
答案 0 :(得分:0)
你需要使用除常量之外的其他语言,因为它只是一个常数。 例如简单,常规甚至模板语言,如速度等。 在哪里创建要使用的SQL。
尝试
<simple>
SELECT
*
FROM
widgets
WHERE
widget_name = '${body}'
</simple>
您能在这里看到支持的语言吗? http://camel.apache.org/languages
或者使用Velocity或Freemarker等模板框架根据模板文件生成SQL。