0

我可以成功地读取文件并使用 Camel Netty 通过 UDP 发送内容,但前提是我在通过 UDP 发送之前修改处理器中的消息内容。

我有一个简单的类来演示,它有两条骆驼路线:

  1. 从“收件箱”目录读取文件(我使用的测试文件很小 - 小于 50 字节),将其写入“发件箱”目录,然后通过 UDP 发送
  2. 从 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();
    }
}
4

0 回答 0