CamelのXMLを使用して、やや凝ったCamelルートを構築しようとしています<camelContext>。
2つのActiveMQキュー、、、toProcessおよびreadyMySQLデータベースがあります。データベースには、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キューに配置します。最後に、BurninatorBeanはready各WidgetPOJOを消費し、その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化する
前もって感謝します。