Camel异常处理策略

2024-04-25 18:32
文章标签 异常 处理 策略 camel

本文主要是介绍Camel异常处理策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Camel异常处理策略

  • 异常策略
  • Gap detection
  • 一个OnException配置多个异常
  • 核心类

异常策略

异常策略主要用来拦截和处理特定的异常。

假设有如下异常:

org.apache.camel.RuntimeCamelException (wrapper by Camel)
+ com.mycompany.OrderFailedException+ java.net.ConnectException

真正的异常是ConnectException,但是它被包装成了OrderFailedException,然后又被包装成了 RuntimeCamelException。

Camel会按照ConnectionException -> OrderFailedException -> OrderFailedException的顺序查找最佳匹配的OnException配置。

假设存在如下OnException配置:

onException(OrderFailedException.class).maximumRedeliveries(3);

抛出RuntimeCamelException异常后,Camel会首先查看ConnectionException是否与OrderFailedException完全匹配,很明显不完全匹配;

Camel继续检查ConnectionException是否是OrderFailedException的子类,很明显也不是;

然后Camel继续查看包装类OrderFailedException是否与OrderFailedException完全匹配,这次他们完全匹配,因此会采用OrderFailedException的异常策略。

onException的配置会覆盖error handler的配置。假设error handler配置的重试次数是5,则OrderFailedException异常侧率的重试次数3将会被使用。

让我们看一下稍微复杂的情形,假设存在如下on exception 配置:

onException(OrderFailedException.class).maximumRedeliveries(3);
onException(ConnectException.class).maximumRedeliveries(10);

这次如果抛出的还是RuntimeCamelException,那么会匹配到ConnectException的异常策略,因为它跟ConnectException异常完全匹配。

如果抛出的是IOException异常,那么因为IOException与OrderFailedException不完全匹配,也不是OrderFailedException的子类;同样IOException与ConnectException不完全匹配,也不是ConnectException的子类,因此IOException不会匹配到任何异常策略。那么他会回退到error handler的配置。

Gap detection

如果Camel没有找到直接匹配的的异常策略,Camel可以利用gap detection找到Gap最小的异常策略。

假设有如下异常处理策略:

onException(ConnectException.class).maximumRedeliveries(5);onException(IOException.class).maximumRedeliveries(3).redeliveryDelay(1000);onException(Exception.class).maximumRedeliveries(1).redeliveryDelay(5000);

发生如下异常:

org.apache.camel.OrderFailedException
+ java.io.FileNotFoundException

Camel首先查看是否有与FileNotFoundException完全匹配的异常策略,很明显没有;

然后Camel进行gap detection,因为FileNotFoundException是IOException和Exception的子类,因此只有这两个异常策略匹配,然后在看他们之间的Gap,IOException与FileNotFoundException之间的Gap是1, Exception与FileNotFoundException之间的Gap是2。因此IOException的异常策略是更好的选择。

java.lang.Exception
+ java.io.IOException+ java.io.FileNotFoundException

然后Camel继续查看OrderFailedException,此时只有Exception的异常策略与之匹配,且Gap也是1。这时Exception的异常处理策略是更好的选择。

java.lang.Exception
+ OrderNotFoundException

现在有两个异常策略Gap相同,这时Camel该如何选择呢?此时Camel会选择第一个,也就是 IOException 的异常处理策略。

一个OnException配置多个异常

例子

onException(XPathException.class, TransformerException.class).to("log:xml?level=WARN");
onException(IOException.class, SQLException.class, JMSException.class).maximumRedeliveries(5).redeliveryDelay(3000);

核心类

org.apache.camel.processor.errorhandler.DefaultExceptionPolicyStrategy#getExceptionPolicy

这篇关于Camel异常处理策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935458

相关文章

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2