Camel Netty没有从文件发送到UDP

时间:2013-10-30 11:06:02

标签: java udp apache-camel netty

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

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

  1. 从'inbox'目录中读取文件(我正在使用的测试文件很小 - 少于50个字节),将其写入'outbox'目录,然后通过UDP发送
  2. 从UDP读取并简单地处理消息(在此示例中,只打印出一些行)
  3. 将文件写入发件箱似乎总是有效(暗示我认为骆驼布线没问题),但是如果我手动更新消息内容,则仅通过UDP发送似乎有效。代码如下,我尝试了以下内容:

    • 代码原样(处理器已注释掉)
      • 将文件写入发件箱(内容与输入文件匹配)
      • 没有通过UDP收到
    • 处理器取消注释,只是做in.setBody(“blah”);
      • 将文件写入发件箱(内容为“blah”)
      • 通过UDP
      • 收到的消息“blah”
    • 处理器取消注释,只需执行in.setBody(in.getBody());
      • 将文件写入发件箱(内容与输入文件匹配)
      • 没有通过UDP收到
    • 处理器取消注释,只需执行System.out.println(“从文件”中读取[“+ in +”]);
      • 将文件写入发件箱(内容与输入文件匹配)
      • 没有通过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();
        }
    }
    

0 个答案:

没有答案