我正在使用spring-cloud-stream在微服务之间进行通信。我在Rabbit MQ Broker中具有以下预定义的设置。
"first" -> exchange of type Topic which is bound to Queue (name="user.create",x-dead-letter-exchange="first.dlx")
"first.dlx" -> dead letter exchange of type Topic
和以下配置文件:
spring:
cloud:
stream:
bindings:
consumer-input:
group: user.create
destination: first
contentType: application/json
binder: rabbit
binders:
rabbit:
type: rabbit
rabbit:
bindings:
consumer-input:
consumer:
acknowledgeMode: manual
declareExchange: false
queueNameGroupOnly: true
bindQueue: false
deadLetterExchange: first.dlx
autoBindDlq: true
deadLetterRoutingKey: user.create.dlq
当我启动应用程序时说:
[AMQP Connection 127.0.0.1:5672] ERROR o.s.a.r.c.CachingConnectionFactory - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'first.dlx' in vhost '/': received 'direct' but current is 'topic', class-id=40, method-id=10)
因为Rabbit mq尝试声明类型为“直接”的dlx。这是repo的链接。
所以我的问题……有什么办法告诉兔子mq声明除“直接”之外的其他类型的dlx,例如属性名:“ deadLetterExchangeType:topic”?还是根本不声明dlx。
任何其他建议将非常有帮助。
最佳答案
当前无法定义DLX交换类型或阻止其声明。请打开issue against the binder。
仅允许指定类型可能是不够的,因为它可能具有其他不兼容的参数。我们可能应该添加declareDlx
,类似于declareExchange
。