在异常情况下,此骆驼路线会确认消息吗?

时间:2019-03-26 10:39:41

标签: apache-camel activemq jms-topic

我有一个骆驼路线,它将JSON转换为对象并将其传递给处理器类。代码如下。该ActiveMQ使用者未确认某些消息,导致对该主题进行备份。该代码未明确设置确认模式,但断点显示了这些值-

acknowledgementMode = -1 ConfirmationModeName = null

应该进行哪些更改以确保在成功处理以及处理器类内部发生异常时都发送确认?

@Component
public class MyRoute extends RouteBuilder {

    private String mySubscription;

    private MyProcessor myProcessor;

    public MyRoute(@Value("${my.topic}") String tripSubscription, MyProcessor myProcessor) {
        this.mySubscription = mySubscription;
        this.myProcessor = myProcessor;
    }

    @Override
    public void configure() {
        from(mySubscription)
                .unmarshal().json(JsonLibrary.Jackson, MyDTO.class)
                .bean(myProcessor, "process(${body})")
                .end();
    }
}

处理器类-

@Slf4j
@Component
@AllArgsConstructor
public class MyProcessor {

    public void process(MyDTO dto) {

        //code that throws exception

    }

}

2 个答案:

答案 0 :(得分:1)

旁注……看起来您没有将“tripSubscription”设置为实例变量,如果这是您的意图……

答案 1 :(得分:0)

骆驼JMS component docs at Github说默认的确认模式是AUTO_ ACKNOWLEDGE

但是,较旧的docs at camel.apache.org表示默认值为-1 与您看到的值相对应。要么默认值已在最新版本中更改,要么Github上的新文档是错误的。

-1某种程度上无效的,因为它不是the defined modes之一。

因此,您可以尝试明确针对消费者设置acknowledgementModeName=AUTO_ACKNOWLEDGE