Apache Camel Route节点的消息载体Exchange
来源:互联网 发布:北京域名备案的时间 编辑:程序博客网 时间:2024/05/20 01:45
在Camel的route中,消息在Route的各个节点中是以Exchange的形式传递的,所以对Exchange结构的理解对使用Camel来说是很重要的.
Exchange ID 如果不指定,Camel会默认设置一个,可以用来标识一个route的一次执行.
MEP message exchange pattern,有InOnly和InOut方式.
Exception 但route出异常的时候,抛出的异常赋值给这个变量(但在示例中似乎不是这样?).
In message 上一个节点传入的内容,是mandatory.的.
Out message 当MEP 是InOut的时候才用,不是mandatory.的.
Headers 键值对<String Object>,在下一个节点可以再取出来.
Attachments 在调用web service或者发邮件的时候放附件.
Body 消息内容,java对象.
Exchange的结构如下图所示:
2* exchange.getException()不能得到Exception,需要通过这样的方式: Exception exception = (Exception) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);
3* exchange.getOut()被调用后,还需要将 "In Message"的header里的内容在copy到 "Out message"中去.通常都绕过out往下一个节点传值,可以用这种方式:exchange.getIn().setBody("$contents"),
在下一个节点仍然可以得到内容,同时前面节点set在header中的内容也存在.
4*本人用的是Camel 2.7.5,不知道后续的版本会不会把这些"pitfall"给填上.
原文链接:http://blog.csdn.net/kkdelta/article/details/7432867
Exchange ID 如果不指定,Camel会默认设置一个,可以用来标识一个route的一次执行.
MEP message exchange pattern,有InOnly和InOut方式.
Exception 但route出异常的时候,抛出的异常赋值给这个变量(但在示例中似乎不是这样?).
In message 上一个节点传入的内容,是mandatory.的.
Out message 当MEP 是InOut的时候才用,不是mandatory.的.
Headers 键值对<String Object>,在下一个节点可以再取出来.
Attachments 在调用web service或者发邮件的时候放附件.
Body 消息内容,java对象.
Exchange的结构如下图所示:
Exchange可以直接作为参数在route用到的方法中使用,如果route中的方法不是Exchange,Camel会根据一套规则将Exchange中的Body转换成该方法的参数类型.
这个结构里的各部分内容可以像下面的代码示例的方式进行访问:
from("file:d:/temp/inbox?delay=3000").bean(new ExchangeManipulateBean(),"implicitConvert").bean(new ExchangeManipulateBean(),"traverseExchange").to("file:d:/temp/outbox");public class ExchangeManipulateBean { private static Logger log = Logger.getLogger(ExchangeManipulateBean.class); public void implicitConvert(String msg){ log.debug("implicitConvert: " + msg); } public void traverseExchange(Exchange exchange){ log.debug("exchange.getExchangeId() " + exchange.getExchangeId()); log.debug("exchange.getPattern() " + exchange.getPattern()); log.debug("exchange.getException() " + exchange.getException()); Map<String, Object> props = exchange.getProperties(); for(String key:props.keySet()){ log.debug("props: " + key + " " + props.get(key)); } Message in = exchange.getIn();//in always null,but can be accessed without exception log.debug("exchange.getIn() " + in); log.debug("in.getMessageId() " + in.getMessageId() ); log.debug("in.getClass().getName() " + in.getClass().getName()); Map<String, Object> headers = in.getHeaders(); for(String key:headers.keySet()){ log.debug("headers: " + key + " " + headers.get(key)); } Object body = in.getBody(); log.debug("body " + body + " " + body.getClass().getName()); log.debug("in.getAttachmentNames() " + in.getAttachmentNames()); //Message out = exchange.getOut();//whenever out is touched,information in headers are lost1* implicitConvert 的方法接收的参数是String,Camel会在运行的时候根据一定的规则将"In Message"的Body转换成String,这里是将文件的内容转成String,这是由Camel内部的TypeConverter完成的.
2* exchange.getException()不能得到Exception,需要通过这样的方式: Exception exception = (Exception) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);
3* exchange.getOut()被调用后,还需要将 "In Message"的header里的内容在copy到 "Out message"中去.通常都绕过out往下一个节点传值,可以用这种方式:exchange.getIn().setBody("$contents"),
在下一个节点仍然可以得到内容,同时前面节点set在header中的内容也存在.
4*本人用的是Camel 2.7.5,不知道后续的版本会不会把这些"pitfall"给填上.
原文链接:http://blog.csdn.net/kkdelta/article/details/7432867
- Apache Camel Route节点的消息载体Exchange
- Apache Camel Route节点的消息载体Exchange
- Apache Camel Route节点的消息载体Exchange
- 关于apache camel的消息转发效率
- camel-exchange
- 基于JsonObject的消息载体JsonObjectResult
- Apache Camel TypeConverter的使用
- camel route 创建顺序
- Apache Camel
- Apache Camel
- 分布式消息队列RabbitMQ之二: exchange、route、queue关系
- RabbitMQ中 exchange、route、queue的关系
- RabbitMq的整理 exchange、route、queue关系
- RabbitMQ中 exchange、route、queue的关系
- RabbitMQ中 exchange、route、queue的关系
- RabbitMQ中 exchange、route、queue的关系
- RabbitMq的整理 exchange、route、queue关系
- RabbitMQ中 exchange、route、queue的关系
- Servlet单实例以及线程安全小结
- Apache Camel框架之事务控制
- Apache Camel框架之Freemarker做数据转换
- oracle_导致实例逐出的五大问题
- md5加密方法
- Apache Camel Route节点的消息载体Exchange
- 字符设备驱动模型
- Oracle RAC 11.2.0.3 节点CRS无法启动报:no network hb 故障解决方法
- sybase IQ 12.7 安装截图
- Apache Camel简介与入门
- JBuilder特点
- 企业信息化杂汤:信息化的价值(6)
- erlang17.4 + centos6.4 install
- python3 终端下英汉词典 BeautifulSoup+网络爬虫