我正在使用Stream版本的3.0.6.RELEASE。
我有一个名为my.queue.exchange的现有交易所。我的应用程序包含一个使用者,我希望创建一个名为MY_QUEUE的队列,并将该队列绑定到my.queue.exchange exchange。此外,我希望将失败的消息重新发布到名为MY_QUEUE_DLQ的DLQ中。
我的问题是,名为MY_QUEUE_DLQ的死信队列绑定到my.queue.exchange.dlx交换时使用两个路由密钥,而不是一个,第一个是路由密钥my.queue.rkey.dlx,第二个是路由密钥MY_QUEUE。
我的消费豆:
@Bean
public Consumer<Dto> consumeFunction() {
return dto -> {
// do stuff
};
}我的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发布于 2022-01-03 09:22:32
您需要在兔子使用者属性上设置republishToDlq: false。在RabbitExchangeQueueProvisioner中,您可以看到以下代码(参见comment_ )
if (properties instanceof RabbitConsumerProperties
&& ((RabbitConsumerProperties) properties).isRepublishToDlq()) {
/*
* Also bind with the base queue name when republishToDlq is used, which
* does not know about partitioning
*/
declareBinding(dlqName, new Binding(dlq.getName(), DestinationType.QUEUE,
dlxName, baseQueueName, arguments));
}您还可以获得更多的细节,这里,为什么。
而且,我看到你在用
spring:
cloud:
stream:
function:
definition: consumeFunction请把它换成
spring:
cloud:
function:
definition: consumeFunction由于其他属性已被废弃,并已在3.2版本中被移除。
https://stackoverflow.com/questions/70543231
复制相似问题