我可以成功地读取文件并使用 Camel Netty 通过 UDP 发送内容,但前提是我在通过 UDP 发送之前修改处理器中的消息内容。
我有一个简单的类来演示,它有两条骆驼路线:
- 从“收件箱”目录读取文件(我使用的测试文件很小 - 小于 50 字节),将其写入“发件箱”目录,然后通过 UDP 发送
- 从 UDP 读取并简单地处理消息(在这个例子中,只打印出一些行)
将文件写入发件箱似乎总是可行的(对我来说,骆驼接线没问题),但是如果我手动更新消息的内容,通过 UDP 发送似乎才有效。代码如下,我尝试了以下方法:
- 代码原样(处理器注释掉)
- 文件被写入发件箱(内容与输入文件匹配)
- 通过 UDP 没有收到任何内容
- 处理器未注释,只是在做 in.setBody("blah");
- 文件被写入发件箱(内容为“blah”)
- 通过 UDP 接收到的消息“blah”
- 处理器未注释,只是在做 in.setBody(in.getBody());
- 文件被写入发件箱(内容与输入文件匹配)
- 通过 UDP 没有收到任何内容
- 处理器未注释,只是在做 System.out.println("Read [" + in + "] from file");
- 文件被写入发件箱(内容与输入文件匹配)
- 通过 UDP 没有收到任何内容
- 多次打印“从文件中读取 [test.txt]”行
更新:
- 处理器未注释,正在执行 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();
}
}