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