文档章节

Camel In Action 读书笔记 (6)

vidy_tu
 vidy_tu
发布于 2013/06/11 12:56
字数 497
阅读 2.3K
收藏 10

今天继续学习第五章,Error handling.

Camel作为一个集成框架,需要与外部系统对接。外部系统的不稳定因素导致其异常处理也相对复杂些。

Camel将异常分为两大类:

一是 irrecoverable error(不可恢复),比如数据库异常不能存取了。

二是recoverable error(可恢复),比如与外部系统进行TCP通讯时不稳定。

关于这两种异常的处理方式也是不一样的:

irrecoverable error的处理方式一般是调用Exchange的两个
void setException(Throwable cause);处理异常

Exception getException();获取异常

recoverable error的处理方式是:

Message msg = Exchange.getOut();
msg.setFault(true);
msg.setBody("Unknown customer");

Error handlers in Camel

Camel提供了四种error handle来处理异常。

1.The default error handler

这是Camel默认的处理方式,我们不需额外添加代码。默认的设置是:不重新发起;异常会返回给调用者。

2.The dead letter channel error handler

这种处理方式是将异常的消息放入一个队列中,如下图,代码如下:

errorHandler(deadLetterChannel("log:dead?level=ERROR"));

image

3.The transaction error handler

这个在第9张会专门讲事物,再细说。

4.The no error handler

这个看名字就可以明白,就是禁止errorHandler.不会产生错误。

5.The logging error handler

记录产生的异常以及对应的消息。

Using error handlers with redelivery

这一节讲如何重新发起任务,代码如下:

errorHandler(defaultErrorHandler()            
    .maximumRedeliveries(2)
    .redeliveryDelay(1000)
    .retryAttemptedLogLevel(LoggingLevel.WARN));

from("file://target/orders?delay=10000")
    .beanRef("orderService", "toCsv")
    .to("mock:file")
    .to("seda:queue.inbox");

from("seda:queue.inbox")
    .errorHandler(deadLetterChannel("log:DLC")  

.maximumRedeliveries(5).retryAttemptedLogLevel(LoggingLevel.INFO)

  .redeliveryDelay(250).backOffMultiplier(2))
.beanRef("orderService", "validate")
.beanRef("orderService", "enrich")            
.to("mock:queue.order");

关于errhandle的处理可以定义在路由前面(红色部分)他的作用域是整个上下文,也可以定义在路由中(绿色部分),他的作用域是这条路由。

Using exception policies

关于Exception不同的exception;Camel提供了不同的exception不同的处理策略。可参考http://www.oschina.net/question/234345_51143

© 著作权归作者所有

vidy_tu

vidy_tu

粉丝 33
博文 18
码字总数 7631
作品 0
武汉
程序员
私信 提问
加载中

评论(1)

甲由
甲由
fsdf
Camel In Action 读书笔记 (8)

第8章Enterprise integration patterns是core Camel的最后一章了,第二章已经介绍了一部分camel在eip中的应用。这一章全部都是讲eip. 看来eip确实是camel的核心,camel确实是基于eip的。 这一...

vidy_tu
2013/06/16
1.9K
7
Camel In Action 读书笔记 (5)

接下来说说第四章, 第四章介绍如何在Camel中使用普通bean,关于bean的使用方式前面已有介绍:javaDSL和SpringDSL两种方式。 下面讲下bean的Camel中的使用模式。 The Service Activator patt...

vidy_tu
2013/06/09
602
0
Camel In Action 读书笔记 (2)

在1.4中介绍了Camel的整体架构,以及Camel中的一些概念. 架构图 关于各个概念不在此详述. Camel的主要流程: 1:创建CamelContext CamelContext context = new DefaultCamelContext(); 2.添加C...

vidy_tu
2013/06/01
1.6K
0
Apache Camel 2.17.1 发布,路由以及媒介引擎

Apache Camel 2.17.1 发布了,一些提升及新特性: [CAMEL-9574] - Be able to force one-way operation when using camel-cxf transport [CAMEL-9883] - Add a SpringCache based idempotent......

淡漠悠然
2016/05/09
1.2K
2
Apache Camel 2.15.0 发布,Java 规则引擎

Apache Camel 2.15.0 发布啦!!!该版本经过 6 个月开发,修复了超过 500 个 bug。但最值得关注的是给我们带来的新特性: 自文档 目录组件 Camel 工具类目录 重用 Camel 命令 Camel Boot /...

红薯
2015/03/12
1.3K
2

没有更多内容

加载失败,请刷新页面

加载更多

 企业信息平台的快速搭建,框架如何选?

Web端开发框架如何选 目前,大部分的企业信息集成系统都在web端运行,而搭建框架的选择对一个企业的发展至关重要,不过其最终目的都是要符合企业发展逻辑,助力企业战略的实施。 而在框架的选...

我想造火箭
16分钟前
25
0
安装mysql 实操截图

前言: CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用MariaDB代替了,MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之...

冥焱
20分钟前
57
0
FecMall 多商户分销系统 - 价格公式计算

FecMall Fecbdc 分销价格公式计算 本章详解讲述分销平台的各个价格,以及相应的设置,本章节非常重要,贯穿分销系统的整个流程,请仔细阅读 官网: http://www.fecmall.com/ 业务逻辑设计 系...

FecShop
21分钟前
33
0
Java Web 学习笔记(7)

文件下载 package com.janeroad.servlet;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.......

JaneRoad
25分钟前
41
0
如何在JavaScript中更改span元素的文本

如果我有跨度,请说: <span id="myspan"> hereismytext </span> 如何使用JavaScript将“ hereismytext”更改为“ newtext”? #1楼 对于现代浏览器,您应该使用: document.getElementByI......

技术盛宴
26分钟前
46
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部