1

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はreadyWidgetPOJOを消費し、そのBurninator#burninate(Widget)メソッドに渡す必要があります。

要約すると:

  1. 外部プロセスは、「fizz」などの文字列をtoProcessキューに配置します
  2. Camel-Quartzジョブは5分ごとに起動し、「fizz」(およびその他)をデキューします
  3. Camel-JDBC- SELECT * FROM widgets WHERE widget_name = 'fizz'>XPathが必要だと思う
  4. 25widgetレコードがクエリによって返されると言います
  5. 25個すべてがシリアル化され(binary / JSON / XML?)、readyキューに入れられます
  6. 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化する

前もって感謝します。

4

1 に答える 1

0

それは単なる定数であるため、定数以外の言語を使用する必要があります。たとえば、シンプルでグルーヴィーな、または速度などのテンプレート言語などです。使用する SQL を作成する場所。

試してみてください

<simple>
            SELECT
                *
            FROM
                widgets
            WHERE
                widget_name = '${body}'
</simple>

ここでサポートされている言語を確認できますか http://camel.apache.org/languages

または、Velocity や Freemarker などのテンプレート フレームワークを使用して、テンプレート ファイルに基づいて SQL を生成します。

于 2012-12-05T08:11:05.593 に答える