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.

Spring Cloud Stream RabbitMQ – enlaza DLQ con un intercambio utilizando una clave de enrutamiento

Estoy utilizando la versión 3.0.6.RELEASE de Spring Cloud Stream.

Tengo un exchange existente llamado “my.queue.exchange”. Mi aplicación contiene un consumidor, quiero crear una cola llamada “MY_QUEUE” y enlazar esa cola al exchange “my.queue.exchange”. Además, quiero republicar los mensajes fallidos en una DLQ llamada “MY_QUEUE_DLQ”.

Mi problema es que la cola de mensajes muertos “MY_QUEUE_DLQ” está enlazada al exchange “my.queue.exchange.dlx” con dos claves de enrutamiento en lugar de una, la primera con la clave de enrutamiento “my.queue.rkey.dlx” y la segunda con la clave de enrutamiento “MY_QUEUE”.

Mi bean consumidor:

@Bean
public Consumer<dto> consumeFunction() {

    return dto -> {
       // hacer algo
    };
}

Mi “application.yml”:

spring:
  cloud:
    stream:
      function:
        definition: consumeFunction
      rabbit:
        bindings:
          consumeFunction-in-0:
            consumer:
              autoBindDlq: true
              deadLetterQueueName: MY_QUEUE_DLQ
              deadLetterExchange: my.queue.exchange.dlx
              deadLetterRoutingKey: my.queue.rkey.dlx
              deadLetterExchangeType: topic
              declareExchange: false
              bindQueue: true
              queueNameGroupOnly: true
              bindingRoutingKey: 'my.queue.rkey'
      bindings:
        consumeFunction-in-0:
          destination: my.queue.exchange
          group: MY_QUEUE
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear una cola llamada MY_QUEUE y vincularla al intercambio my.queue.exchange, debes agregar la siguiente configuración a tu archivo application.yml:

    spring:
      cloud:
        stream:
          rabbit:
            bindings:
              consumeFunction-in-0:
                destination: MY_QUEUE
                binder:
                  exchangeType: topic
                  deadLetterExchange: my.queue.exchange.dlx
                  deadLetterRoutingKey: my.queue.rkey.dlx
                  deadLetterQueueName: MY_QUEUE_DLQ
                  declareExchange: false
                  routingKey: my.queue.rkey
    

    Explicación de la configuración:

    • destination: MY_QUEUE: crea una cola con el nombre MY_QUEUE y la vincula al intercambio my.queue.exchange.
    • exchangeType: topic: establece el tipo de intercambio como topic.
    • deadLetterExchange: my.queue.exchange.dlx: establece el intercambio de mensajes no entregados a my.queue.exchange.dlx.
    • deadLetterRoutingKey: my.queue.rkey.dlx: establece la clave de enrutamiento para mensajes no entregados a my.queue.rkey.dlx.
    • deadLetterQueueName: MY_QUEUE_DLQ: establece el nombre de la cola para mensajes no entregados como MY_QUEUE_DLQ.
    • declareExchange: false: deshabilita la creación automática del intercambio.
    • routingKey: my.queue.rkey: establece la clave de enrutamiento como my.queue.rkey.

    Nota: Es posible que necesites ajustar la configuración según tu caso de uso específico.

Comments are closed.