2

Camel (2.11.0) を使用して、次の機能を実現しようとしています。

  • ファイルが特定の場所に存在する場合は、それを別の場所にコピーしてから処理を開始します
  • そのようなファイルが存在しない場合、ファイルのコンシューマー/ポーラーをブロックしたくありません。direct:cleanupルートまで処理を続けたいだけ

ファイルを一度だけポーリングしたい!

これが私がこれまでに持っているものです(Spring XMLを使用):

<camelContext id="my-camel-context" xmlns="http://camel.apache.org/schema/spring">
    <route id="my-route
        <from uri="file:///home/myUser/myApp/fizz?include=buzz_.*txt"/>

        <choice>
            <when>
                <!-- If the body is empty/NULL, then there was no file. Send to cleanup route. -->
                <simple>${body} == null</simple>
                <to uri="direct:cleanup" />
            </when>

            <otherwise>
                <!-- Otherwise we have a file. Copy it to the parent directory, and then continue processing. -->
                <to uri="file:///home/myUser/myApp" />
            </otherwise>
        </choice>

        <!-- We should only get here if a file existed and we've already copied it to the parent directory. -->
        <to uri="bean:shouldOnlyGetHereIfFileExists?method=doSomething" />
    </route>

    <!--
        Other routes defined down here, including one with a "direct:cleanup" endpoint.
    -->
</camelContext>

上記の設定では、 にファイルがない場合/home/myUser/myApp/fizz、Camel はファイルができるまで待機/ブロックします。代わりに、あきらめて に進みたいdirect:cleanup.

ファイルがある場合、shouldOnlyGetHereIfFileExistsBean 内で処理されていることがわかりますが、コピーされていることはわかりません/home/myUser/myApp。そのため、<otherwise>要素が完全にスキップ/無視されているかのようです!

何か案は?前もって感謝します!

4

4 に答える 4

2

この設定を試して、ポーリング間隔を調整してください:

キャメル ファイル コンポーネントのドキュメントから:

sendEmptyMessageWhenIdle

デフォルト = false

Camel 2.9: ポーリング コンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (本文なし) を送信できます。

ファイルの書き込みに関しては、ログ ステートメントを内部に追加して、ファイル<otherwise>が実行されていることを確認します。その場合は、ファイル/フォルダーのアクセス許可などを確認してください。

幸運を。

于 2014-01-21T12:54:05.453 に答える
0

条件を使用しようとしたときに直面した1つのエラー:

 <simple>${body} != null</simple>

常に true を返します。

以下のリンクを参照してください。

http://camel.465427.n5.nabble.com/choice-when-check-BodyType-null-Body-null-td4259599.html

それはあなたを助けるかもしれません。

于 2014-01-22T07:35:23.850 に答える