当前位置: 首页 > 知识库问答 >
问题:

Apache Camel自定义错误处理程序,用于控制每个异常的行为

谷梁存
2023-03-14

Apache Camel提供了两种上下文级别的错误处理方法:errorHandler和OnException。

我正在寻找一个解决方案,提供最好的两个世界在一个配置。我想要的是,我应该配置一个错误处理程序(可能是自定义的),并且在该自定义错误处理程序中,我应该能够控制每个异常的行为,例如:

如果我得到IOException,我将以3秒的间隔进行3次重新传递尝试

如果我得到了FileNotFoundException,我将以10秒的间隔进行5次重新传递尝试

errorHandler将使我能够使用提供的错误处理程序之一,并以类似的方式处理所有异常。例如,使用这种方法,我不能对不同的异常进行不同的重新传递尝试。

所以,这里出现了onException(异常),它相当于骆驼上下文级别的try-catch。我可以用它来定义每个异常行为。

我尝试使用带有死信通道的自定义bean,试图控制从bean进行的重新传递尝试。但是,Camel在将控件传递给自定义bean之前会尝试重新传递。

任何关于实现我想要的解决方案的想法。

在第一组评论之后编辑,以求更清晰:我知道OnException的这个特性。路由会引发不同类型的异常。此外,随着系统上线后新的路由/处理器/变压器的开发,新的异常也随之增加。如果我使用onException,那么我(或开发人员)必须指定其中的每一个。(我不想使用onException(Exception.class)方法。)因此,这将需要在上下文中添加更多的onException子句,新的exception get被添加到系统中。此外,某些异常可能需要特殊处理。我不想依赖开发人员进行错误处理。因此,我正在研究一个基于自定义错误处理程序的通用解决方案。这将帮助我保持配置简单,因为我必须在上下文上只指定一个错误处理程序。这个错误处理程序可以从JMX控制台进行管理,并为我提供了以自定义方式处理任何异常的灵活性。

共有1个答案

胡意致
2023-03-14

您可以使用onException(exception.class).onWhen(谓词),然后使用java方法调用作为返回true或false的谓词。然后您可以使用java代码来触发onException是否应该做出反应。

请参阅更多详细信息

  • http://camel.apache.org/exception-clause.html
  • 骆驼行动手册第150页。
 类似资料:
  • 我正在用Spring Boot开发一个rest应用程序。此应用程序有一个自定义筛选器,只允许在某些请求下访问。如果用户需要特定的资源,筛选器将抛出异常。如何在全局级别处理此筛选器中生成的所有异常? 我尝试了注释,但不起作用。

  • 本文向大家介绍SpringBoot错误处理机制以及自定义异常处理详解,包括了SpringBoot错误处理机制以及自定义异常处理详解的使用技巧和注意事项,需要的朋友参考一下 上篇文章我们讲解了使用Hibernate Validation来校验数据,当校验完数据后,如果发生错误我们需要给客户返回一个错误信息,因此这节我们来讲解一下SpringBoot默认的错误处理机制以及如何自定义异常来处理请求错误。

  • 我为运行时可能发生的各种错误创建了多个自定义异常。为此,我使用@ControllerAdvice注释和全局错误处理程序(如下所述:Spring Boot 异常处理。我还在数据库级别实现了约束(如果这很重要,它是一个SQL Server数据库),并且我有一个表,该表具有插入数据时可能引发的两个不同约束。 我现在想做的是在Spring Boot中为数据库级别的每个约束实现自定义异常,这样我就可以向用户

  • 我们使用高图表在单个超文本标记语言页面上绘制多个图表。 然而,一个/一些图表抛出highchart错误,我们喜欢捕捉这些错误并向用户显示不同的错误。为此,highcharts确实提供了自定义错误处理程序。但这个自定义错误处理程序不提供有关抛出该错误的特定图表的信息。 这里是highcharts提供的JS Fiddle,它适用于图表: http://jsfiddle.net/gh/get/libra

  • 所有的错误最终都会被 Tango.ErrHandler 进行处理。 你可以自定义你的错误处理方式来替代默认的。例如: var ( prefix = "<html><head>tango</head><body><div>" suffix = fmt.Sprintf("</div><div>version: %s</div></body></html>", tango.Version

  • 404和500错误客户端和服务端都会通过error.js组件处理。如果你想改写它,则新建_error.js在文件夹中: import React from 'react' export default class Error extends React.Component { static getInitialProps({ res, err }) { const statusCod