【问题标题】:How to properly handle Exceptions in Apache Camel using OnException如何使用 OnException 正确处理 Apache Camel 中的异常
【发布时间】:2014-07-27 12:49:45
【问题描述】:

我是 Apache Camel 的新手。我能够将 JMS 消息从一个队列发送到另一个队列。我想知道如何处理异常。我学习了onException,但它对我不起作用。

我将我的 jms 队列更改为 jms1。但是,当我执行代码时,我得到了一个异常。

我的期望是每当我遇到异常时都应该调用我的 bean 类,但事实并非如此。

例外:

org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToCreateRouteException:创建路由失败 route1 at: >>> To[jms1:queue:FinalQSource] [OnException[[class j... 因为 Failed to resolve endpoint: jms1://queue:FinalQSource due to:没有找到带有方案的组件:jms1

代码

<camelContext id="jmsContext" xmlns="http://camel.apache.org/schema/spring">   
  <onException>
  <exception>org.apache.camel.RuntimeCamelException</exception>
  <exception>org.apache.camel.ResolveEndpointFailedException</exception>
    <!-- <handled><constant>true</constant></handled> -->           
      <bean ref="exceptionListener" method="orderFailed" />
  </onException>
  <route>
    <from uri="jms:queue:testQSource" />
    <to uri="jms1:queue:FinalQSource" /><!--
  </route>
</camelContext>

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    这将不起作用,因为骆驼在尝试解析您的路线时会抛出异常。 onException 块只会捕获在路由执行期间抛出的异常。

    要测试异常处理,请使用正确的骆驼测试指南 - http://camel.apache.org/testing.html

    我建议模拟您的一个端点以返回异常,例如这里 - https://github.com/christian-posta/camel-sandbox/blob/master/one-off/src/test/java/posta/TestMockExceptions.java

    MockEndpoint mockException = MockEndpoint.resolve(context, "mock:exception");
        mockException.whenAnyExchangeReceived(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception {
                System.out.println("i got here...");
                throw new RuntimeException("fail!");
            }
    });
    

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多