CamelのXMLを使用して、やや凝ったCamelルートを構築しようとしています<camelContext>
。
2つのActiveMQキュー、、、toProcess
およびready
MySQLデータベースがあります。データベースには、widgets
次のようなテーブルがあります。
widget_id | widget_name | widget_value
(INT) (VARCHAR 50) (INT)
外部プロセスは、生の文字列メッセージをtoProcess
キューに配置します。これらのメッセージは、次のような単純な文字列です。
- 「フィズ」
- 「バズ」
- 「foo」
など。このキューを5分ごとにポーリングしtoProcess
(Camel-Quartzを使用)、これらの消費メッセージ(fizz、buzzなど)の本文にあるSELECT
文字列widgets
を、widget_name
一致する文字列(フィズまたはバズとして)。
次にwidget
、 JDBC呼び出しから取得したすべてのレコードを取得して、ready
キューに配置します。最後に、Burninator
Beanはready
各Widget
POJOを消費し、そのBurninator#burninate(Widget)
メソッドに渡す必要があります。
要約すると:
- 外部プロセスは、「fizz」などの文字列を
toProcess
キューに配置します - Camel-Quartzジョブは5分ごとに起動し、「fizz」(およびその他)をデキューします
- Camel-JDBC-
SELECT * FROM widgets WHERE widget_name = 'fizz'
>XPathが必要だと思う - 25
widget
レコードがクエリによって返されると言います - 25個すべてがシリアル化され(binary / JSON / XML?)、
ready
キューに入れられます - 1つずつ
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>
キャメルのウィザードは、ここで私を正しい方向に向けることができますか(キャメルのアクションの章を参照する以外に、読む必要があります;-))。具体的には問題があります:
- の適切な文字列値を使用してJDBCSQLをパラメータ化する
widget_name
- JDBC SQLが返すものはすべて、
ready
キューに送信できるものにシリアル化する ready
キュー上のメッセージをJavaPOJOに逆シリアルWidget
化する
前もって感謝します。