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

Camel异常/错误处理事务路由而不导致客户端异常

奚无尘
2023-03-14

出现运行时异常--这应该会导致事务回滚。

我希望能够截获异常,并回复一个真正的消息(而不是异常)给客户机。因此,我开始实现一个错误处理程序

    onException(RuntimeException.class)
        .handled(true)
        .markRollbackOnly()
        .filter(header(Header.REPLY_TO.getName()).isNotNull())
        .to(DESTINATION_FOR_EXCEPTION_HANDLING)
        .to(DESTINATION_FOR_REPLIES);

其中:

    null
    null
    null

如何配置camel,既防止事务中的消息刷新,又能够将异常转换为已处理的错误消息?

共有1个答案

司徒高寒
2023-03-14

如果发送到这两个目的地的onException使用与from相同的Camel组件,那么您需要为此使用一个单独的组件,以便它们是Indpendent。因为回滚否则会导致它们全部回滚。

假设使用ActiveMQ,只需声明两个组件

   <bean id="activemq" ...>

   <bean id="activemq2" ...>

然后在OnException中使用activemq2。然后可以配置为使用相同的brokerUrl等等。对于第二个,您可能需要将其设置为transacted=false。

 类似资料:
  • 我有一个使用RESTEasy的简单客户端,如下所示: 服务器配置为在以及一条有用的信息。正在抛出一个。除了包装在中之外,我如何使捕获异常并以字符串形式返回响应的有用消息。我尝试了各种实现,但似乎都是正确的。上述代码从未调用。我错过了什么? 我目前的解决方法是使用,然后执行并将原始状态填充到响应实体中。这样我就避免了异常抛出。

  • 那么如何提取错误代码呢?我想提取错误代码并构建一个responseEntity 我得到了这段代码,但不知道如何在函数中使用。

  • 我无法解决这个问题。 非常感谢任何帮助。如需更多信息,请发电子邮件。

  • 我使用Apache Ignite 2.7.5作为.NET核心中服务器和瘦客户机。当我做与缓存相关的操作时,put、get和load等.net核心应用程序会自动崩溃。 因此,我想处理for循环内部的异常,例如、、等,然后从catch块抛出for循环,否则如果只有异常块,则继续循环迭代。

  • 我正在尝试处理下游服务抛出的异常并捕获错误代码以及错误响应消息。在网上搜索了一些解决方案后,我看到了下面处理异常的常用方法,但我真的不确定我必须在我的MyCustomConnectionException中写些什么?顺便说一下,当我使用Resttemplate时,我可以通过抛出HttpClientResponseException来轻松地处理并捕获所有内容,但我真的不知道这是如何工作的?我是使用W

  • 当程序出现错误或者异常时,我们一般会希望在开发时输出报错信息,在生产环境时隐藏详细的信息。 在 imi 中,提供了 Http 服务的错误异常默认处理器支持。 默认 Http 错误处理器:Imi\Server\Http\Error\JsonErrorHandler 指定默认处理器 配置文件中: return [ 'beans' => [ 'HttpErrorHan