Camel Error Handler

2024-04-25 18:32
文章标签 error handler camel

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

Camel Error Handler

  • 1. 实现原理
  • 2. Handler简介
    • 2.1 DefaultErrorHandler
    • 2.2 DeadLetterErrorHandler
    • 2.3 TransactionErrorHandler
  • 3. 重试
    • 3.1 示例
    • 3.2 重试情况记录
  • 4. ErrorHandler的作用域
    • 4.1 Context级别的ErrorHandler
    • 4.2 路由级别的ErrorHandler

Camel主要支持以下几种ErrorHandler,Camel 默认预置 DefaultErrorHandler。

  • DefaultErrorHandler
  • DeadLetterChannel
  • TransactionErrorHandler

1. 实现原理

对每一个Camel路由,在节点与节点之间都包含一个channel,channel主要用于运行态的监控和路由控制。

from("direct:newOrder").bean("orderService, "validate").bean("orderService, "store");

在这里插入图片描述

2. Handler简介

2.1 DefaultErrorHandler

DefaultErrorHandler的默认设置为:

  • 不进行重试;
  • 异常传回给调用者;
  • 堆栈轨迹打印到日志文件中;
  • exchange的路由历史打印到日志文件中;

默认情况下,异常发生后,handler会将异常信息作为exchange的属性存储起来,可以通过以下方法获取到异常信息:

final Exception exception = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);

2.2 DeadLetterErrorHandler

DeadLetterErrorHandler与DefaultErrorHandler类似,不同点如下:

  • DeadLetterErrorHandler是唯一一个将错误消息传递到错误队列的ErrorHandler。这个队列通常叫做 死信队列(dead letter queue)。
  • 异常发送到死信队列,而非调用者
  • 允许将原始消息发送到死信队列

异常发生时,进入死信队列的消息不是原始传入的消息,而是经过加工处理的消息,为了支持重试,你可能希望将原始消息存入死信队列。这时候可以通过useOriginalMessage来实现。

errorHandler(deadLetterChannel("jms:queue:dead").useOriginalMessage());

2.3 TransactionErrorHandler

后续介绍……

3. 重试

Camel的重试是基于错误点的重试,而不是从整个路由开始进行重试。

3.1 示例

示例:自动重试5次,每次间隔10秒钟。

errorHandler(defaultErrorHandler().maximumRedeliveries(5).redeliveryDelay(10000));

示例2:自动重试2次,每次间隔1秒钟,日志级别WARN,不打印消息历史。

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

3.2 重试情况记录

exchange中与重试相关的Header。

Headertypedescription
Exchange.REDELIVERY_COUNTERintThe current delivery attempt
Exchange.REDELIVEREDbooleanWhether this exchange is being redelivered
Exchange.DELIVERY_EXHAUSTEDbooleanWhether this exchange has attempted (exhausted) all redeliveries and has still failed

4. ErrorHandler的作用域

4.1 Context级别的ErrorHandler

errorHandler(defaultErrorHandler()// enable async redelivery mode (pay attention to thread names in console output).asyncDelayedRedelivery().maximumRedeliveries(2).redeliveryDelay(1000).retryAttemptedLogLevel(LoggingLevel.WARN));

4.2 路由级别的ErrorHandler

from("direct:start").id("sample-route").errorHandler(deadLetterChannel("log:DLC").maximumRedeliveries(5).retryAttemptedLogLevel(LoggingLevel.INFO).redeliveryDelay(250).backOffMultiplier(2)).log("User ${header.name} is calling us").filter(simple("${header.name} == 'Kaboom'")).throwException(new AuthorizationException("Forbidden")).end().to("mock:done");

这篇关于Camel Error Handler的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

收藏:解决 pip install 出现 error: subprocess-exited-with-error 错误的方法

在使用 pip 安装 Python 包时,有时候会遇到 error: subprocess-exited-with-error 错误。这种错误通常是由于 setuptools 版本问题引起的。本文将介绍如何解决这一问题 当你使用 pip install 安装某个 Python 包时,如果 setuptools 版本过高或过低,可能会导致安装过程出错,并出现类似以下错误信息:error: subpr

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 (debug笔记)

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 ##一、 缘由及解决方法 把这个pytorch-ddpg|github搬到jupyter notebook上运行时,出现错误Nn criterions don’t compute the gradient w.r.t. targets error。注:我用

src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没有那个文件或目录

(venv) shgbitai@shgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddeviceCollecting pyaudioDownloading PyAudio-0.2.14.tar.gz (47 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ERROR 2003 (HY000): Can't connect to MySQL server on (10061)

在linux系统上装了一个mysql-5.5,启动后本机都是可以访问的,操作都正常,同时建了一个%的用户(支持远程访问), root@debian:/# mysql -u loongson -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id

pip install pyaudio sounddevice error: externally-managed-environment

shgbitai@shgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddeviceerror: externally-managed-environment× This environment is externally managed╰─> To install Python package

C++常见异常汇总(三): fatal error: google/protobuf/port_def.inc

文章目录 1、fatal error : sw/redis++/redis.h2、fatal error: dwarf.h: No such file or directory3、fatal error: elfutils/libdw.h: No such file or directory4、fatal error: libunwind.h: No such file or directo

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

vua 10700-Camel trading 贪心以及栈

大意:给一个表达式,可以让你任意套括号,问套完括号最大最小值是多少 贪心策略:最大的话,先+后*                  最小的话,先*后+ 用了一个栈堆模拟运算的次序 #include<stdio.h>#include<iostream>#include<stack>using namespace std;int main(){int N;scanf("%d",&

【NodeJS】Error: Cannot find module 'ms'

转载自:http://blog.csdn.net/echo_ae/article/details/75097004 问题: Error: Cannot find module 'ms'at Function.Module._resolveFilename (module.js:469:15)at Function.Module._load (module.js:417:25)at Module