首页 > 解决方案 > 这条骆驼路线会在异常情况下确认消息吗?

问题描述

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

确认模式 = -1 确认模式名称 = 空

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

@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

    }

}

标签: apache-camelactivemqjms-topic

解决方案


Github上的 Camel JMS 组件文档说默认确认模式是AUTO_ ACKNOWLEDGE.

但是,camel.apache.org 上的旧文档说默认-1 值与您看到的值相对应。要么在最近的版本中更改了默认值,要么在 Github 上的新文档是错误的。

该值-1某种程度上是无效的,因为它不是定义的模式

因此,您可以尝试在您的 consumer 上显式设置acknowledgementModeName=AUTO_ACKNOWLEDGE


推荐阅读