第170章 ストリーム


ストリームコンポーネント

stream: コンポーネントは、System.inSystem.out および System.err ストリームへのアクセスを提供し、ファイルと URL のストリーミングを許可します。

URI 形式

stream:in[?options]
stream:out[?options]
stream:err[?options]
stream:header[?options]
Copy to Clipboard Toggle word wrap
さらに、ファイル および URL エンドポイント URI は Apache Camel 2.0 でサポートされています。
stream:file?fileName=/foo/bar.txt
stream:url[?options]
Copy to Clipboard Toggle word wrap
stream:header URI が指定されている場合、ストリーム ヘッダーを使用して、書き込むストリームを検索します。このオプションは、ストリームプロデューサー(つまり、from ()には表示されません)でのみ利用できます
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください

オプション

Expand
名前 デフォルト値 説明
delay 0 ストリームの消費または生成前の初期遅延(ミリ秒単位)。
encoding JVM のデフォルト 1.4 の時点では、テキストベースのストリーム(例:メッセージボディーは String オブジェクト)を使用するようにエンコーディング(文字 セット名)を設定できます。指定のない場合、Apache Camel は JVM のデフォルト Charset を 使用します。
promptMessage null Apache Camel 2.0: stream:in から読み取るときに使用するメッセージプロンプト。たとえば、これを Enter a command に設定できます
promptDelay 0 Apache Camel 2.0: メッセージプロンプトを表示する前のオプションの遅延(ミリ秒単位)。
initialPromptDelay 2000 Apache Camel 2.0: メッセージプロンプトを表示する前の初期遅延(ミリ秒単位)。この遅延は 1 回だけ発生します。システムの起動時に使用され、システムへの他のロギングが行われている間にメッセージのプロンプトが書き込まれないようにすることができます。
fileName null Apache Camel 2.0: stream:file URI 形式を使用する場合、このオプションはストリーミング元/元のファイル名を指定します。
url null stream:url URI 形式を使用する場合、このオプションはストリーム間の URL を指定します。入力ストリームは、JDK URLConnection 機能を使用して開きます。
scanStream false
Apache Camel 2.0: unix tail コマンドなどのストリームを継続的に読み取るために使用されます。Camel 2.4 to Camel 2.6: 上書きされるとファイルのオープンを再試行します。tail --retryのようになります。
retry false Camel 2.7: ファイルが上書きされた場合にファイルを開く再試行します。tail --retryのようになります。
scanStreamDelay 0 Apache Camel 2.0: scanStream を使用する場合の読み取り試行間の遅延(ミリ秒単位)。
groupLines 0 Camel 2.5: コンシューマーの X 数の行をグループ化します。たとえば、10 行をグループ化し、行ごとに 1 Exchange ではなく、10 行だけのエクスチェンジをスプアウトします。
autoCloseCount 0 Camel 2.10.0: (2.9.3 および 2.8.6)プロデューサーでストリームを閉じる前に処理するメッセージの数。デフォルトではストリームを閉じません(Producer が停止した場合のみ)。より多くのメッセージが送信されると、ストリームは別の autoCloseCount バッチに対して再度開きます。
closeOnDone false Camel 2.11.0: このオプションは、Splitter と streaming を同じファイルに組み合わせて使用します。パフォーマンスを向上させるために、ストリームを開いた状態にし、スプリ ッター が完了したときのみ閉じることです。ここでは、2 つ以上のファイルではなく、同じファイルにのみストリームを行う必要があり、最後の分割されたメッセージがストリームエンドポイントにルーティングされ、閉じられるシグナルを取得する必要があることに注意してください。

メッセージの内容

stream: コンポーネントは、ストリームに書き込むために String または byte[] のいずれかをサポートします。String または byte[] コンテンツのいずれかを message.in.body に追加します。ストリームに送信されたメッセージ: バイナリーモードのプロデューサーは、( String メッセージではなく)改行文字が続くことはありません。null ボディーを持つメッセージは出力ストリームに追加されません。

サンプル

以下の例では、direct:in エンドポイントから System.out ストリームにメッセージをルーティングします。
// Route messages to the standard output.
from("direct:in").to("stream:out");

// Send String payload to the standard output.
// Message will be followed by the newline.
template.sendBody("direct:in", "Hello Text World");

// Send byte[] payload to the standard output.
// No newline will be added after the message.
template.sendBody("direct:in", "Hello Bytes World".getBytes());
Copy to Clipboard Toggle word wrap
以下の例は、ヘッダータイプを使用して、使用するストリームを判断する方法を示しています。この例では、独自の出力ストリーム MyOutputStream を使用します。
private OutputStream mystream = new MyOutputStream();
private StringBuffer sb = new StringBuffer();

@Test
public void testStringContent() {
    template.sendBody("direct:in", "Hello");
    // StreamProducer appends \n in text mode
    assertEquals("Hello\n", sb.toString());
}

@Test
public void testBinaryContent() {
    template.sendBody("direct:in", "Hello".getBytes());
    // StreamProducer is in binary mode so no \n is appended
    assertEquals("Hello", sb.toString());
}

protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        public void configure() {
            from("direct:in").setHeader("stream", constant(mystream)).
                to("stream:header");
        }
    };
}

private class MyOutputStream extends OutputStream {

    public void write(int b) throws IOException {
        sb.append((char)b);
    }
}
Copy to Clipboard Toggle word wrap
以下の例は、ファイルストリームを継続的に読み取る方法を示しています(UNIX tail コマンドに似ています)。
from("stream:file?fileName=/server/logs/server.log&scanStream=true&scanStreamDelay=1000").to("bean:logService?method=parseLogLine");
Copy to Clipboard Toggle word wrap
注記
scanStreamretry の組み合わせを使用する場合の 1 つは、ファイルが再開かれ、scanStreamDelay の反復ごとにスキャンされることです。NIO2 が利用可能になるまで、ファイルがいつ削除または再作成されるかを確実に検出することはできません。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat