Обработка пользовательских исключений Rabbit MQ Micronaut 2.2.1

#java #micronaut #micronaut-rest

#java #micronaut #micronaut-rest

Вопрос:

Попытка реализовать обработку исключений потребителей в Micronaut 2.2.1 https://micronaut-projects.github.io/micronaut-rabbitmq/latest/guide/#consumerExceptions

Согласно документации

Если компонент-потребитель реализует RabbitListenerExceptionHandler, то исключения будут отправлены в реализацию метода.

Если компонент-потребитель не реализует RabbitListenerExceptionHandler, то исключения будут перенаправлены на основной компонент обработчика исключений. Чтобы переопределить обработчик исключений по умолчанию, замените DefaultRabbitListenerExceptionHandler на свою собственную реализацию, обозначенную как @Primary .

 @Singleton
@Primary
public class RabbitListenerExceptionHandler implements io.micronaut.rabbitmq.exception.RabbitListenerExceptionHandler {
    private static final Logger LOG = LoggerFactory.getLogger(RabbitListenerExceptionHandler.class);
    @Override
    public void handle(RabbitListenerException exception) {
        if (LOG.isErrorEnabled()) {
            Optional<RabbitConsumerState> messageState = exception.getMessageState();
            if (messageState.isPresent()) {
                LOG.error("Error processing a message for RabbitMQ consumer ["   exception.getListener()   "]", exception);
            } else {
                LOG.error("RabbitMQ consumer ["   exception.getListener()   "] produced an error", exception);
            }
        }
    }
}
 

Исключение во время выполнения

 Caused by: io.micronaut.context.exceptions.NonUniqueBeanException: Multiple possible bean candidates found: [io.micronaut.rabbitmq.exception.DefaultRabbitListenerExceptionHandler, fete.bird.common.extension.RabbitListenerExceptionHandler]
 

Как я могу переопределить обработчик RabbitListenerExceptionHandler ??

Ответ №1:

Вы должны заменить реализацию по умолчанию на @Replaces(DefaultRabbitListenerExceptionHandler.class)