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

如何在重新传递时忽略Camel中的一个异常

呼延俊风
2023-03-14

我必须实现一个错误处理程序,它在发送SOAP请求并处理其响应的业务流程上使用Camel重新交付策略。在process部分期间,可以抛出一个特殊的异常(RetryException)。这个异常是在错误处理程序级别捕获的(多亏了onException(RetryException.Class))。这是最简单的部分。

现在,我想忽略cxfendpoint可能抛出的异常(在每个示例出现连接错误的情况下),并处理它们。所以我试着:

  • (1)一条具有带有重试策略的onException子句的主路由
  • (2)一个子路由,它聚合了2条路由(并具有noErrorHandler),以确保重播这2条路由,而不仅仅是抛出异常的处理路由:
    • (3)发送SOAP请求的路由
    • (4)处理响应并可抛出RetryException的路由。

    为了忽略cxfendpoint抛出的异常,我实现了如下路由(3):

    public void configure() {
        from(ROUTE_NAME).
        .handleFault() // To handle Soap fault
        .onException(Fault.class)
            .continued(true)
            .end()
        .to("cxf:[...]")
        ;
    }
    

    它的工作方式很好,响应处理器在抛出RetryException之前执行一些检查...但是继续的指令丢弃了我以前所拥有的所有关于重传的信息,Camel认为这个例外是第一个。因此路由进入一种永远重试循环。

    Headers: {breadcrumbId=ID-ITEM-S28636-63117-1469800853403-0-1, CamelRedelivered=true, CamelRedeliveryCounter=1, CamelRedeliveryMaxCounter=2, operationName=[...]}
    

    在onException(Fault)之后交换标头:

    Headers: {breadcrumbId=ID-ITEM-S28636-63117-1469800853403-0-1, operationName=[...]}
    

    您是否有任何解决方案来忽略某些子路由异常而不擦除上路由重试策略?

共有1个答案

东门秦迟
2023-03-14

我猜您是通过directendpoint连接路由的;如果是这种情况,我认为您的主要问题是您将fault标记为continued(表示已处理),这很可能是导致您的重发报头被清除的原因。您可以尝试使用seda消息队列,但不要使用directendpoint,因为它基本上将您的路由链接到一个endpoint。

 类似资料:
  • 问题内容: 我有以下代码: 我想执行:即使(上面的行)抛出异常。除了: 我连续有很多test.setSomething,它们都可能引发异常。如果他们这样做,我只想跳过这一行,移至下一行。 为了澄清起见,我不在乎它是否引发异常,并且我无法编辑引发此异常的代码的源代码。 这是我不关心例外的情况(请不要使用通用量化的语句,例如“您永远不要忽略异常”)。我正在设置某些对象的值。当我向用户提供值时,无论如何

  • 我正试图用JPATransactionManager即spring PlatformTransactionManager运行一个camel transacted()路由(一个独立的java进程)(因为我希望camel路由在单个DB事务中运行),但我无法在事务方法失败的情况下禁止从MQ Broker进行重新传递,尽管我在onException子句中使用了handle(true)以及自定义的重新传递策

  • 我正在用Python编写一个自定义备份脚本。有时mkdir函数或print函数或任何函数由于各种原因而失败。这样的异常会使整个脚本停止,并在中途停止备份,这是非常令人沮丧的。到目前为止,我已经通过添加try:...except:...语句并正确管理这些异常来管理这些问题。但是,有一天,某个其他语句或函数也可能因为尚未触发的其他原因而引发异常。 有没有一种方法告诉脚本继续进行?是否相当于在try:.

  • 问题内容: 当你只想执行但不处理异常时,如何在Python中进行呢? 以下是正确的方法吗? 问题答案: 要么 所不同的是,第一个也将赶上KeyboardInterrupt,SystemExit和类似的东西,这是直接来源于,没有

  • 我在JMeter for REST Api中使用HTTP请求进行了大量测试,并使用JDBC请求进行了sql测试。现在的问题是,在每次测试中,第一个请求的响应时间甚至比其他请求高10倍。我知道这是由于JMeter需要建立与服务器或数据库的连接。当我使用更多线程时,例如200,每个线程中的第一个请求都存在这个问题。 JMeter中有什么好的解决方案可以在计算平均/偏差/吞吐量时忽略连接时间吗?

  • 问题内容: 我有一个像这样初始化的数据表: 以后我想做 它工作正常,但现在我想在该请求中发送一些参数。这些参数仅在重新加载时才需要,而在表的初始化中则不需要。我怎么做?谢谢! 问题答案: 选项1- 使用preXhr.dt事件。 看到这里http://datatables.net/reference/event/ 选项2(首选) -使用ajax.data函数。 两种选择都会产生相同的结果。您的服务器