Apache camel 在异常情况下,此驼峰路由是否会确认消息?

Apache camel 在异常情况下,此驼峰路由是否会确认消息?,apache-camel,activemq,jms-topic,Apache Camel,Activemq,Jms Topic,我有一个驼峰路由,它将JSON转换为对象并将其传递给处理器类。代码如下。此ActiveMQ使用者未确认某些消息,导致主题被备份。代码没有显式设置确认模式,但断点显示这些值- acknowledgementMode=-1 acknowledgementModeName=null 应更改哪些内容以确保在成功处理时以及在processor类内部发生异常时发送确认 @Component public class MyRoute extends RouteBuilder { private St

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

acknowledgementMode=-1 acknowledgementModeName=null

应更改哪些内容以确保在成功处理时以及在processor类内部发生异常时发送确认

@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

    }

}
驼峰表示默认确认模式为自动确认

但是,旧的表示默认值为-1,与您看到的值相对应。要么是在最新版本中更改了默认值,要么是Github的新文档错误

值-1在某种程度上是无效的,因为它不是


因此,您可以尝试在您的消费者上显式设置AcknowledgementModelName=AUTO_ACKNOWLEDGE。

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

camel jms默认情况下应使用自动确认模式,当收到的消息不是事务语义时,会尽快确认消息。您使用的是什么版本的Camel和ActiveMQ?在代码中,Camel版本是2.19.5,ActiveMQ版本是5.15.8,尽管我连接的代理显示为5.15.2