Будет ли этот Camel Route подтверждать сообщение в сценарии исключения?

У меня есть маршрут Camel, который преобразует JSON в объект и передает его классу процессора. Код ниже. Этот потребитель ActiveMQ не подтверждает некоторые сообщения, что приводит к резервному копированию раздела. Код явно не устанавливает режим подтверждения, но точка останова показывает эти значения:

ПодтверждениеMode = -1 ПодтверждениеModeName = ноль

Что нужно изменить, чтобы подтверждения отправлялись как при успешной обработке, так и при возникновении исключения внутри класса процессора?

@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

    }

}

person jerry.pepper    schedule 26.03.2019    source источник
comment
camel-jms должен использовать режим AUTO ack по умолчанию, и сообщение получает ACK как можно скорее после его получения (не семантика транзакций). Какую версию Camel и ActiveMQ вы используете?   -  person Claus Ibsen    schedule 26.03.2019
comment
В коде версия Camel — 2.19.5, а версия ActiveMQ — 5.15.8 (хотя брокер, к которому я подключаюсь, показывает 5.15.2)   -  person jerry.pepper    schedule 26.03.2019


Ответы (2)


Примечание… похоже, вы не устанавливаете «tripSubscription» в переменную экземпляра и экземпляр, если это было вашим намерением…

person Eric Kramer    schedule 16.05.2021

Компонент Camel JMS docs на Github говорит, что режим подтверждения по умолчанию — AUTO_ ACKNOWLEDGE.

Однако в более старых документах на camel.apache.org указано, что по умолчанию используется -1 что соответствует значению, которое вы видите. Либо значение по умолчанию было изменено в последней версии, либо новые документы на Github неверны.

Значение -1 каким-то образом недействительно, так как оно не является ни одним из определенные режимы.

Поэтому вы можете попробовать явно установить acknowledgementModeName=AUTO_ACKNOWLEDGE для вашего потребителя.

person burki    schedule 27.03.2019