0

尝试在 Micronaut 2.2.1 中实现处理消费者异常https://micronaut-projects.github.io/micronaut-rabbitmq/latest/guide/#consumerExceptions

根据文档

如果消费者 bean 实现了 RabbitListenerExceptionHandler,那么异常将被发送到方法实现。

如果消费者 bean 没有实现 RabbitListenerExceptionHandler,那么异常将被路由到主异常处理程序 bean。要覆盖默认异常处理程序,请将 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 ?

4

1 回答 1

1

您必须将默认实现替换为@Replaces(DefaultRabbitListenerExceptionHandler.class)

于 2020-12-11T14:13:56.320 回答