ファイルから正常に読み取り、Camel Netty を使用して UDP 経由で内容を送信できますが、UDP 経由で送信する前にプロセッサでメッセージの内容を変更した場合に限ります。
2 つのキャメル ルートを持つ単純なクラスを示します。
- 「inbox」ディレクトリからファイルを読み取り (使用しているテスト ファイルは小さく、50 バイト未満)、「outbox」ディレクトリに書き込み、UDP 経由で送信します。
- 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();
}
}