java - rabbitmq binder 中的自定义 DLX 选项
问题描述
我正在使用 spring-cloud-stream 在微服务之间进行通信。我在 rabbit mq 代理中有以下预定义设置。
"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 尝试声明类型为“direct”的 dlx。这是回购的链接。
所以我的问题......有没有办法告诉rabbit mq声明除“直接”之外的其他类型的dlx,比如属性名称:“deadLetterExchangeType:topic”?或者根本不声明 dlx。
任何其他建议都会非常有帮助。
解决方案
目前无法定义 DLX 交换类型或阻止其声明。请针对活页夹打开一个问题。
仅允许指定类型可能还不够,因为它可能有其他不兼容的参数。我们可能应该添加declareDlx
,类似于declareExchange
.
推荐阅读
- azure - 具有高 CPU 且无负载的应用服务计划
- javascript - 如何从Javascript中的对象列表中获取不同的年份
- c++ - 对 2 个数组求和并在第三个数组中显示输出的程序。它显示运行时错误。为什么?
- docker - Docker 的 GRPC 连接不可用
- r - 匹配R中两个数据框之间的单词
- c++ - 在 QScrollArea 中居中 QLabel 派生小部件
- c# - Xamarin Android FTP 启动时的身份验证问题
- python - 'OrderedDict' 对象没有属性 'sort'
- php - 在 Woocommerce 中禁用特定付款方式的送货方式
- php - Laravel 404 页面未找到,路线存在