es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Pregunta: ¿Cómo puedo configurar mi aplicación Spring Boot para establecer propiedades MDC (Mapped Diagnostic Context) solo para eventos de RabbitMQ?

    Respuesta:

    Para establecer propiedades MDC solo para eventos de RabbitMQ en una aplicación Spring Boot utilizando Spring AMQP y Spring Rabbit, puedes crear un fabricante de contenedores de escucha personalizado que establezca las propiedades MDC antes de que el mensaje sea procesado por la escucha.

    Aquí tienes un ejemplo de implementación del fabricante de contenedores de escucha personalizado:

    @Configuration
    public class RabbitMDCConfigurer {
    
        @Bean
        public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
                ConnectionFactory connectionFactory,
                SimpleRabbitListenerContainerFactoryConfigurer configurer
        ) {
            SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
            configurer.configure(factory, connectionFactory);
    
            // Establecer las propiedades MDC en el fabricante
            factory.setBeforeSendReplyPostProcessors(
                    message -> {
                        MDC.put("correlationId", message.getMessageProperties().getCorrelationId());
                        MDC.put("messageId", message.getMessageProperties().getMessageId());
                        return message;
                    });
    
            return factory;
        }
    }
    

    En esta implementación, creamos un fabricante de contenedores de escucha personalizado extendiendo SimpleRabbitListenerContainerFactory y estableciendo las propiedades MDC utilizando el método setBeforeSendReplyPostProcessors. El método setBeforeSendReplyPostProcessors toma un objeto PostProcessor que se llama antes de que el mensaje se envíe al servidor de RabbitMQ. En nuestra implementación, establecemos las propiedades MDC correlationId y messageId a partir de las propiedades del mensaje.

    Una vez que hayas creado el fabricante de contenedores de escucha personalizado, puedes usarlo para crear contenedores de escucha de RabbitMQ. Las propiedades MDC solo se establecerán para esos escuchas.

    @RabbitListener(queues = "myQueue", containerFactory = "rabbitListenerContainerFactory")
    public void handleMessage(String message) {
        // Tu lógica de procesamiento de mensajes aquí
    }
    

    En este ejemplo, creamos un escucha de RabbitMQ anotando un método con @RabbitListener. Especificamos el nombre de la cola y el fabricante de contenedores de escucha personalizado que creamos.

    Con esta implementación, cada vez que se recibe un mensaje de RabbitMQ, se llama al método handleMessage con las propiedades MDC establecidas según las propiedades del mensaje.

Comments are closed.