Java 如何正确配置此骆驼路线xml?
我正在尝试使用Camel的XML构建一个有点奇特的Camel路由 我有两个ActiveMQ队列,toProcess和ready,以及一个MySQL数据库。数据库有一个widgets表,如下所示:Java 如何正确配置此骆驼路线xml?,java,xml,serialization,routing,apache-camel,Java,Xml,Serialization,Routing,Apache Camel,我正在尝试使用Camel的XML构建一个有点奇特的Camel路由 我有两个ActiveMQ队列,toProcess和ready,以及一个MySQL数据库。数据库有一个widgets表,如下所示: widget_id | widget_name | widget_value (INT) (VARCHAR 50) (INT) 外部进程将原始字符串消息放置在toProcess队列上。这些消息是简单的字符串,例如: 起泡 嗡嗡声 福 等。我想使用Camel Quartz每隔5分钟轮询一次
widget_id | widget_name | widget_value
(INT) (VARCHAR 50) (INT)
外部进程将原始字符串消息放置在toProcess队列上。这些消息是简单的字符串,例如:
起泡
嗡嗡声
福
等。我想使用Camel Quartz每隔5分钟轮询一次这个toProcess队列,并将这些consumes消息体中的字符串fizz、buzz等合并到JDBC SELECT语句中,该语句将查找小部件名称与字符串(如fizz或buzz)匹配的任何小部件
然后,我想获取从JDBC调用中检索到的每个小部件记录,并将其放在就绪队列中。最后,一个Burninator bean应该从ready消费,并将每个小部件POJO传递给它的BurninatorburninateWidget方法
因此,总结一下:
外部进程在toProcess队列中放置一个字符串,如fizz
Camel Quartz作业每5分钟启动一次,并将fizz和任何其他作业排成队
Camel JDBC SELECT*来自widget,其中widget_name='fizz'->我怀疑我需要XPath
假设通过查询返回25个小部件记录
所有25个都得到序列化的二进制/JSON/XML?并将其置于就绪队列中
BurninatorburninateWidget一个接一个地出列就绪,并与下一个出列的小部件一起执行
以下是我目前掌握的情况,但我知道这是错误的:
<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>
除了参考我应该阅读的《骆驼在行动》一章之外,还有谁能给我指出正确的方向。具体来说,我遇到了麻烦:
使用widget_name的适当字符串值参数化JDBC SQL
将JDBCSQL返回的内容序列化为可以发送到就绪队列的内容
将就绪队列上的消息反序列化为Java小部件POJO
提前感谢。您需要使用常数以外的其他语言,因为这只是一个常数。 例如simple、groovy甚至velocity等模板语言。 创建要使用的SQL的位置 试一试
<simple>
SELECT
*
FROM
widgets
WHERE
widget_name = '${body}'
</simple>
你能在这里看到支持的语言吗
或者使用模板框架(如Velocity或Freemarker)根据模板文件生成SQL。我不喜欢这段代码,因为我担心SQL注入。。。除非camel jdbc已经准备好停止SQL注入?