【发布时间】:2012-12-04 01:08:09
【问题描述】:
我正在尝试使用 Camel 的 XML <camelContext> 构建一个有点花哨的 Camel 路线。
我有两个 ActiveMQ 队列,toProcess 和 ready,以及一个 MySQL 数据库。数据库有一个widgets 表,如下所示:
widget_id | widget_name | widget_value
(INT) (VARCHAR 50) (INT)
一个外部进程将原始字符串消息放在toProcess 队列中。这些消息是简单的字符串,例如:
- “嘶嘶声”
- “嗡嗡声”
- “富”
等等。我想每 5 分钟轮询一次 toProcess 队列(使用 Camel-Quartz),并将在这些消费消息(嘶嘶声、嗡嗡声等)的正文中找到的字符串合并到一个 JDBC SELECT 语句中,该语句查找任何 @ 987654329@,其widget_name 匹配字符串(例如 fizz 或 Buzz)。
然后,我想获取从 JDBC 调用中检索到的每条 widget 记录,并将其放在 ready 队列中。最后一个Burninator bean 应该从ready 消费,并将每个Widget POJO 传递给它的Burninator#burninate(Widget) 方法。
回顾一下:
- 外部进程在
toProcess队列中放置一个字符串,例如“fizz” - Camel-Quartz 作业每 5 分钟触发一次,并将“fizz”(和任何其他)出列
- Camel-JDBC
SELECT * FROM widgets WHERE widget_name = 'fizz'--> 我怀疑我需要 XPath - 说 25
widget记录由查询返回 - 所有 25 个都被序列化(二进制/JSON/XML?)并放在
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>
任何骆驼向导可以在这里为我指明正确的方向(除了参考我应该阅读的骆驼行动中的章节;-))。具体来说,我遇到了麻烦:
- 使用
widget_name的适当字符串值参数化 JDBC SQL - 将 JDBC SQL 返回的任何内容序列化为可以发送到
ready队列的内容 - 将
ready队列上的消息反序列化为JavaWidgetPOJO
提前致谢。
【问题讨论】:
标签: java xml serialization routing apache-camel