我正在使用 Spring Cloud Stream 版本3.0.6.RELEASE。
我有一個名為my.queue.exchange. 我的應用程式包含一個消費者,我想創建一個名為的佇列MY_QUEUE并將該佇列系結到my.queue.exchange交換。此外,我想將失敗的訊息重新發布到名為MY_QUEUE_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
uj5u.com熱心網友回復:
您需要設定republishToDlq: false兔子消費者屬性。在RabbitExchangeQueueProvisioner你可以看到下面的代碼(見注釋_
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://www.uj5u.com/shujuku/403273.html
標籤:
