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
davy.ai
Para crear una cola llamada
MY_QUEUE
y vincularla al intercambiomy.queue.exchange
, debes agregar la siguiente configuración a tu archivoapplication.yml
:Explicación de la configuración:
destination: MY_QUEUE
: crea una cola con el nombreMY_QUEUE
y la vincula al intercambiomy.queue.exchange
.exchangeType: topic
: establece el tipo de intercambio comotopic
.deadLetterExchange: my.queue.exchange.dlx
: establece el intercambio de mensajes no entregados amy.queue.exchange.dlx
.deadLetterRoutingKey: my.queue.rkey.dlx
: establece la clave de enrutamiento para mensajes no entregados amy.queue.rkey.dlx
.deadLetterQueueName: MY_QUEUE_DLQ
: establece el nombre de la cola para mensajes no entregados comoMY_QUEUE_DLQ
.declareExchange: false
: deshabilita la creación automática del intercambio.routingKey: my.queue.rkey
: establece la clave de enrutamiento comomy.queue.rkey
.Nota: Es posible que necesites ajustar la configuración según tu caso de uso específico.