【发布时间】:2019-08-16 17:10:23
【问题描述】:
我有一个将 JSON 转换为对象并将其传递给处理器类的 Camel 路由。代码如下。此 ActiveMQ 使用者未确认某些消息,从而导致主题得到备份。代码没有显式设置确认模式,但断点显示这些值 -
确认模式 = -1 确认模式名称 = 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
}
}
【问题讨论】:
-
camel-jms 应该默认使用 AUTO ack 模式,并且消息在收到时尽快被 ACK(不是事务语义)。您使用的是什么版本的 Camel 和 ActiveMQ?
-
在代码中,Camel 版本是 2.19.5,ActiveMQ 版本是 5.15.8(虽然我连接的 broker 显示的是 5.15.2)
标签: apache-camel activemq jms-topic