Apache Camelは非常に実用的なルールエンジンライブラリであり、さまざまなソースからのイベントや情報を処理するために使用できます。 VM、HTTP、FTP、JMS、さらにはファイルシステムなどのさまざまなプロトコルでメッセージを送信し、動作ロジックと送信ロジック分離を維持することができます。これにより、メッセージのコンテンツにより焦点を合わせます。
この記事では、Java言語Apache Camelエントリのデモを提供します。
最初に、Mavenプロジェクトのpom.xmlを作成します。
<?xmlバージョン= "1.0" encoding = "utf-8"?> <project xmlns = "http://maven.apache.org .org/2001/xmlschema-instance "xsi:schemalocation =" http://maven.apache.org/pom/4.0.0.0http://maven.apache.org/maven-v4_0.xsd "> <modelsiiniiniiniiniiiniinisinisionision"> 4.0 。 project.build.sourceencoding> utf-8 </project.build.sourceencoding> <camel.version> 2.11.1 </camel.version> </properties> ency> <groupid> org.apache.camel </groupid> < artifactid> camel-core </artifactid> <version> $ {camel.version} </version> </dependency> <dependency> org.slf4j </groupid> <arttifactid> slf4j-simple </artifactid> <バージョン> 1.7 .5 </version> </dependency> </dependencies> </project>ここでは、Camel-Core.jarパッケージのみを使用します。実際、使用できる多くの実用的なコンポーネントを提供します。ログレコードを目的として、Log Recordの実装としてSLF4J-Simpleを使用したため、コンソールからの出力を確認できます。
次に、ルーティングクラスを構築する必要があります。ルートは、一方の端からもう一方の端にメッセージを渡す方法によって定義されます。 SRC/Main/Java/Camelcoredemo/TimerrouteBuilder.javaファイルを作成し、毎秒プロセッサにメッセージを送信し、簡単に印刷します。
camelcoremo。 from( "time:// timer1?rivers = 1000").process(new processor(){public void process(exchange msg){log.info( "processing {}"、msg);}};}}}}上記はこの例のすべての必要性であり、コンパイルして実行されます。
bash> mvn compilebash> mvn exec:java -dexec.mainclass = org.apache.camel.main.main -dexec.args = '-r camelcoremoroutebuilder'
ここでは、Javaクラスのメインの入り口を書いていません。
Control camelcontext
ラクダが開始されると、キャメルコンテキストオブジェクトが作成されます。これには、ラクダを実行する方法に関する多くの情報があり、作成したルートの定義も含まれます。 CamelContextを介してより多くの制御を取得したい場合は、メインコードを記述する必要があります。私はここに簡単な例です。
camelcoremo static void main(String [] args){new Timermain();} void run()スローCamelContext = new DefaultCamelContext() ); camelcontext.start.getRuntime() ; waitforsstop();} routebuilder createrebuilder(){while){try {shood.sleep(long。max_value);}CreterouteBuilder()メソッドの既存のTimerroutebuilderクラスを再利用したことがわかります。これで、メインクラスが作成、開始、および停止したときにメインクラスが完全に制御されています。 Context(CamelContext)オブジェクトを使用すると、ルートレベルではなくグローバルでキャメルを構成する方法を制御できます。そのJavadocリンクはすべてのセッターメソッドを提供し、それが何ができるかを研究することができます。
また、メインカテゴリに少量のコードを提供する必要があることに注意してください。まず第一に、エレガントな閉鎖の問題に対処する必要があるため、コンテキストのstop()メソッドを呼び出すためにJavaクロージング関数を追加しました。第二に、コンテキストが開始された後、スレッドブロックを追加する必要があります。起動後にメインスレッドをブロックしないと、開始後に終了するだけで役に立たないでしょう。 CTRL+Cキーを押してプロセスを終了するまで、CAMEL(サーバーのような)として(サーバーなど)を実行します。
CamelContextの起動を開始するメインクラスを改善します
メインのクラス設定コードを上記の例と同じくらい処理したくない場合は、代わりにcamel.camel.mainクラスを継承するだけです。このクラスを使用することにより、コンテキストが自動的に設定できるようにするだけでなく、制御プロセスの実行、追跡の有効化、カスタムルートクラスのロードなど、すべての追加のコマンドライン特性を取得できます。
次の例を再構築すると、コードは次のとおりです。
caredemo Static void Main(String [] args){timermain2 = new timermain2(); ;}}これで、Timermain2のコードは以前よりも少ないので、試してみることができます。以前の機能と同じでなければなりません。
bash> mvn compilebash> mvn exec:java -dexec.mainclass = camelcoremo.timermain2 -dexec.args = '-t'
-tオプションを指定した後、ルートトラッキングが予約されることに注意してください。 -Hを使用すると、利用可能なすべてのオプションが表示されます。
ラクダの登録メカニズムで豆を追加します
以前のTimerrouteBuilderの例では、コードに匿名プロセスを作成しました。ここで、いくつかの異なるプロセスをまとめたい場合、キャメル登録メカニズムを追加するために豆を追加すると、コードの混乱がよりよく減少します。 Camelを使用すると、処理をレジストリスペースに使用することができ、その後、それらをBeanコンポーネントとして呼び出すだけです。以下は私の再構成コードです。
caredemo Static Void(String [] args)スロー{TimerBeansMain = new.ablethangupsupport(); ()); addroutebuilder(createroutebuilder()); = 1000 ").to(" bean:processBybean1 ")静的クラスBean2実装プロセッサ{public void Process(Exchange MSG){log.info( "sec ond process {}"、msg);}}}}これで、ルートクラスはより簡潔で明確になり、同時に、処理コードも独立したクラスに再構築されています。ビジネスロジックを実現するために非常に複雑なルートを作成する必要がある場合、この方法はコードをより適切に整理してテストするのに役立ちます。 「レゴ」のように再利用できるPojo Beanを構築できます。キャメルのレジストリスペースは、他の多くの使用にも使用できます。たとえば、多くの情報をカスタマイズしたり、追加の機能を登録したり、スレッドプールの実装戦略内のものを置き換えることもできます。
上記のルートの例は、その読み取り可能性を使用するために、その読み取り可能性を使用できます。
この記事がラクダの探索段階をスキップするのに役立つことを願っています。