ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 了解camel中的in /​​ out交换模式行为

2019-06-23 15:49:04  阅读:287  来源: 互联网

标签:java apache-camel


在驼峰中,说并非所有ENDPOINT都支持INOUT ExchangePattern是否正确?
如果是,那么文档的哪一部分告诉哪个端点支持哪个ExchangePattern或者这是隐式的知识.

它最多为ENDPOINT提供对INOUT的支持.

下面是我得出结论的代码示例.

我正在玩camel example-jms-file并将其修改为

queue1 – > queue2 —> file:// test —>文件:// TEST1

context.addRoutes(new RouteBuilder() {
        public void configure() {                         

            from("test-jms:queue:test.queue1")
            .process(sleep(1))
            .to("test-jms:queue:test.queue2");

            from("test-jms:queue:test.queue2")
            .process(sleep(2))
            .to("file://test");

            from("file://test")
            .process(sleep(3))
            .to("file://test1");
        }

        private Processor sleep(final int sleepId) {
            return new Processor() {                    
                @Override
                public void process(Exchange exchange) throws Exception {                       
                    System.out.println("Going for sleep sleepid=" + sleepId + ",  thread=" + Thread.currentThread().getName());
                    Thread.sleep(5000l);                        
                    System.out.println("Done sleep sleepid=" + sleepId + ",  thread=" + Thread.currentThread().getName());
                }
            };
        }
    });

然后我使用以下代码将msg发送到队列:

        Exchange exchange = new DefaultExchange(context);
        exchange.setPattern(ExchangePattern.InOut);
        exchange.getIn().setBody("Test Message: 1");
  System.out.println("sending msg to queue1");
       Exchange send = template.send("test-jms:queue:test.queue1",exchange);
  // If queue and file endpoint support INOUT then below line should get printed at last.
  System.out.println("received response"); 

执行上面给出以下响应:

sending msg to queue1  

Going for sleep sleepid=1,  thread=Camel (camel-1) thread #0 - JmsConsumer[test.queue1]

Done sleep sleepid=1,  thread=Camel (camel-1) thread #0 - JmsConsumer[test.queue1]

Going for sleep sleepid=2,  thread=Camel (camel-1) thread #1 - JmsConsumer[test.queue2]

Done sleep sleepid=2,  thread=Camel (camel-1) thread #1 - JmsConsumer[test.queue2]

received response   ## this getting printed here meaning that the file endpoint do not respect the INOUT exchangepattern.

Going for sleep sleepid=3,  thread=Camel (camel-1) thread #2 - file://test    

Done sleep sleepid=3,  thread=Camel (camel-1) thread #2 - file://test

如果我们观察执行输出,我们将看到在完成从FILE ENDPOINT开始的路由之前打印接收到的响应.

这表明文件端点没有理解交换是INOUT交换

图形表示:(点击图片放大)

enter image description here

解决方法:

是.并非所有的camel端点都支持INOUT. JMS端点支持它,但文件端点不支持它.

不幸的是,这确实没有很好的记录.

标签:java,apache-camel
来源: https://codeday.me/bug/20190623/1272289.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有