【发布时间】:2020-09-14 07:33:12
【问题描述】:
我们有许多 micore 服务。每个微服务声明并创建自己的队列,但有一个微服务监听其中一些队列。
App A => Creates its own queue A
App B => Listens to queue A
现在问题是当我们修改队列时说App A,例如添加死信队列或添加ttl 等,App B 失败例如此错误:
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED
- inequivalent arg 'x-dead-letter-exchange' for queue 'queue-app-a' in vhost '/':
received none but current is the value 'direct-exchange' of type 'longstr', class-id=50, method-id=10)
现在这个特殊错误是因为我们在 A 上配置了死信队列,但在 B 中我们只是将代码保留为:
@Bean
public Queue queueAppA() {
return new Queue("queue-app-a");
}
有没有办法告诉 Spring 使用现有的可用队列而不是尝试为 App B 声明它?否则我们必须让这些代码保持同步,这既痛苦又容易出错,因为开发人员甚至可能都不知道。
【问题讨论】:
标签: spring-boot rabbitmq