#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)