从JMS主题到Bean的路由不会重试

时间:2019-07-15 22:34:07

标签: java apache-camel activemq

我有一个在路由构建器中用Java定义的路由,如下所示:

from("jms:topic:trigger?maxConcurrentConsumers=1")
        .autoStartup(true)
        .beanRef("someProcessorBeen");

这已经好几年了。

但是,在某些情况下,我希望能够在java处理器bean中引发特定的“重试”异常,以便将相同的交换重新发送到Bean。

我曾尝试将&transacted=true添加到'from'部分的JMS主题引用URI中,但是我刚从DefaultErrorHandler收到一条错误日志消息,内容为“无法传递... ...”,当我抛出重试异常时。

我也尝试添加:

onException(MyRetryException.class).maximumRedeliveries(10);

from路由定义之前,但该路由似乎未创建,因为该路由未处理任何主题消息。

请注意,它们全部在OSGi环境中运行,并且ActiveMQ处理JMS内容。


更新:好的,我发现在路由生成器中添加以下内容可以满足我的需求:

    RedeliveryPolicyDefinition redeliveryPolicy = new RedeliveryPolicyDefinition();
    // Set redelivery policy so it retries every 5 seconds for 10 minutes,
    // then log an error when the retries have been exhausted
    redeliveryPolicy.maximumRedeliveries(120)
            .redeliveryDelay(5000)
            .logExhausted(true)
            .retriesExhaustedLogLevel(LoggingLevel.ERROR);

    onException(MyRetryException.class)
            .setRedeliveryPolicy(redeliveryPolicy);

所以现在的问题是:这是实现这一目标的正确方法吗?

0 个答案:

没有答案