Будет ли этот маршрут верблюда подтверждать сообщение в сценарии исключения? - PullRequest
0 голосов
/ 26 марта 2019

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

cknowledgementMode = -1 acceptledgementModeName = 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

    }

}

1 Ответ

0 голосов
/ 27 марта 2019

Документация по компонентам JMS Camel на Github говорит, что режим подтверждения по умолчанию - AUTO_ ACKNOWLEDGE.

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

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

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

...