Apache Camelフレームワークの入門例


Apache CamelはApache財団の次のオープンソースプロジェクトであり、ルール・ルーティングと処理に基づくエンジンであり、企業統合モデルのJavaオブジェクトの実装を提供し、アプリケーション・インタフェースまたは記述的なJava分野特定言語(DSL)と呼ばれるルーティングと処理のルールを構成する.その核心の思想は1つのfromの源からデータを得て、processor処理を通じて、更に1つのtoの目的に送ります.このfromとtoは私たちがプロジェクトの集積の中でよく出会うタイプです:1つのFTPフォルダの中のファイル、1つのMQのqueue、1つのHTTP request/response、1つのwebserviceなど.Camlはstandaloneの応用に簡単に集積することができます.コンテナ内で動作するWebアプリケーションとSpringとを統合します.次に、最も簡単なCamelアプリケーション.1を開発する方法を例に挙げます.http://camel.apache.org/download.htmlJarパッケージをダウンロードします.本稿を書くときの最新バージョンは2.9です.本稿では2.7を使用しています.2.7からJRE 1.6が必要な環境が必要です.ダウンロードしたzipにはCamelの様々な特性に使用するjarパッケージが含まれています.本明細書の入門例で使用するJarパッケージは、camel-core-2.7.5.jar、commons-management-1.0.jar、slf 4 j-api-1.6.1.jar.2、Eclipseプロジェクトを新規作成する必要があります.上記のjarパッケージをプロジェクトのClasspathに設定します.実行後に完了した作業はd:/temp/inbox/の下のすべてのファイルをd:/temp/outboxに移動することです.
    public class FileMoveWithCamel {  
        public static void main(String args[]) throws Exception {  
            CamelContext context = new DefaultCamelContext();  
            context.addRoutes(new RouteBuilder() {  
            public void configure() {  
            //from("file:d:/temp/inbox?noop=true").to("file:d:/temp/outbox");   
            from("file:d:/temp/inbox/?delay=30000").to("file:d:/temp/outbox");  
            }  
            });  
            context.start();  
            boolean loop =true;  
            while(loop){  
                Thread.sleep(25000);  
            }          
            context.stop();  
            }  
    }  
の上の例は、d:/temp/inbox/があるシステムFTPからCamelが存在するシステムの受信ディレクトリであるなど、最も簡単なルーティング機能を体現している.
d:/temp/outboxはCamelが送信する別のシステムの受信ディレクトリである.
from/toは以下のような別の形式であり、読者はCamelがシステム統合でルーティングを行うことができ、プロセス制御が非常に良いフレームワークであることを見ることができますか?
from("file:d:/temp/inbox/?delay=30000").to("jms:queue:order");//delay=30000は、30秒おきにポーリングするフォルダにファイルがあるか否かである.
3.fromからtoまでの中間フロープロセスプロセス処理の例をさらに示す.
public class FileProcessWithCamel {
    public static void main(String args[]) throws Exception {
        CamelContext context = new DefaultCamelContext();    
        context.addRoutes(new RouteBuilder() {
            
        public void configure() {
        FileConvertProcessor processor = new FileConvertProcessor();
        from("file:d:/temp/inbox?noop=true").process(processor).to("file:d:/temp/outbox");
        }
        });
        
        context.start();
        boolean loop =true;
        while(loop){
            Thread.sleep(25000);
        }
        context.stop();
        }
}

ここでの処理は、受信したファイルの複数行を単純に1行に変換するだけです.
public class FileConvertProcessor implements Processor{
    @Override
    public void process(Exchange exchange) throws Exception {    
        try {
            InputStream body = exchange.getIn().getBody(InputStream.class);
            BufferedReader in = new BufferedReader(new InputStreamReader(body));
            StringBuffer strbf = new StringBuffer("");
            String str = null;
            str = in.readLine();
            while (str != null) {                
                System.out.println(str);
                strbf.append(str + " ");
                str = in.readLine();                
            }
            exchange.getOut().setHeader(Exchange.FILE_NAME, "converted.txt");
            // set the output to the file
            exchange.getOut().setBody(strbf.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Eclipseで実行する場合、Camelはデフォルトでlog情報をコンソールに印刷しません.このようにエラーが発生すると、異常は見えません.log 4 jをプロジェクトに配置する必要があります.
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d [%t] %c: %m%n
log4j.rootLogger = debug,stdout
本文なし