0

ファイルから正常に読み取り、Camel Netty を使用して UDP 経由で内容を送信できますが、UDP 経由で送信する前にプロセッサでメッセージの内容を変更した場合に限ります。

2 つのキャメル ルートを持つ単純なクラスを示します。

  1. 「inbox」ディレクトリからファイルを読み取り (使用しているテスト ファイルは小さく、50 バイト未満)、「outbox」ディレクトリに書き込み、UDP 経由で送信します。
  2. UDP から読み取り、メッセージを処理するだけです (この例では、いくつかの行を出力するだけです)。

outbox へのファイルの書き込みは常に機能しているように見えますが (キャメル ワイヤリングは問題ないことを暗示しています)、メッセージの内容を手動で更新した場合にのみ UDP 経由での送信が機能するようです。コードは以下のとおりで、次のことを試しました。

  • そのままのコード (Processor はコメントアウト)
    • ファイルは送信ボックスに書き込まれます (内容は入力ファイルと一致します)
    • UDP 経由で何も受信しない
  • プロセッサーのコメントを外し、in.setBody("blah"); を実行するだけです。
    • ファイルは送信トレイに書き込まれます(内容は「何とか」)
    • UDP経由で受信したメッセージ「何とか」
  • プロセッサーのコメントを外し、in.setBody(in.getBody()); を実行するだけです。
    • ファイルは送信ボックスに書き込まれます (内容は入力ファイルと一致します)
    • UDP 経由で何も受信しない
  • プロセッサーのコメントを外し、System.out.println("Read [" + in + "] from file"); を実行するだけです。
    • ファイルは送信ボックスに書き込まれます (内容は入力ファイルと一致します)
    • UDP 経由で何も受信しない
    • 「Read [test.txt] from file」という行が複数回出力される

アップデート:

  • プロセッサーのコメントを外し、in.setBody(in.getBody() + " ... Blah"); を実行します。
    • ファイルは書き込まれますが、内容は実際のファイルの内容ではなく「GenericFile[test.txt] ... Blah」(入力ファイル名は test.txt) です。
    • UDP経由でデータを受信しました(ここでも、実際のファイルの内容ではなく、「GenericFile [test.txt] ... Blah」

コード:

public class App {
    public static void main(String[] args) throws Exception {
        CamelContext context = new DefaultCamelContext();

        context.addRoutes(new RouteBuilder() {
            public void configure() {
                from("file://inbox?noop=true")
//                .process(new Processor() {
//                    public void process(Exchange exchange) {
//                      Message in = exchange.getIn();
//                        in.setBody("blah");
//                        in.setBody(in.getBody());
//                        System.out.println("Read [" + in + "] from file");
//                    }
//                })
                .to("file://outbox")
                .to("netty:udp://localhost:9999/");
            }
        });

        context.addRoutes(new RouteBuilder() {
            public void configure() {
                from("netty:udp://localhost:9999/")
                .process(new Processor() {
                    public void process(Exchange exchange) {
                        Message in = exchange.getIn();
                        System.out.println("Got [" + in.getBody() + "] over UDP");
                    }
                });
            }
        });

        context.start();
        Thread.sleep(5000);
        context.stop();
    }
}
4

0 に答える 0