【发布时间】:2021-10-10 14:30:00
【问题描述】:
我有两个独立的应用程序,一个用于生产者,一个是交换类型为 Default(DIRECT) 的消费者。
下面是 Rabbit MQ Producer 的配置以及死信队列设置。
@Bean
Queue dlq() {
return QueueBuilder.durable(dlqQueueName).build();
}
@Bean
Queue queue() {
return QueueBuilder
.durable(queueName)
.withArgument("x-dead-letter-exchange", dlqExchange)
.withArgument("x-dead-letter-routing-key", deadLetterRoutingKey)
.withArgument("x-message-ttl",messageTTL)
.build();
}
@Bean
Binding binding() {
return BindingBuilder.bind(queue()).to(exchange()).with(routingkey);
}
@Bean
Binding dlqBinding() {
return BindingBuilder.bind(dlq()).to(deadLetterExchange()).with(deadLetterRoutingKey);
}
下面是 Rabbit MQ 侦听器在单独应用程序中的代码。
@Component
public class RabbitMqConsumer implements MessageListener {
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${queuename}", durable = "true"),
exchange = @Exchange(value = "exchange"),key = "routingkey"))
public void message(MyClass o) {
//save to db
}
@Override
public void onMessage(Message message) {
// TODO Auto-generated method stub
}
现在,当我运行消费者服务时,它会创建一个同名的重复队列。如下图所示
我也在消费者中尝试了以下设置,但结果相同
@Bean
public Queue queue() {
return QueueBuilder
.durable(env.getProperty("queue"))
.ttl(ttl)
.deadLetterExchange(ddlE)
.deadLetterRoutingKey(env.getProperty("dle.routingkey"))
.build();
}
注意: 当我在生产者中添加死信队列设置时,此问题开始发生,在此设置之前,我在消费者和配置类中都有这个(如下所述)bean 方法制作人,它工作正常。
@Bean
public Queue queue() {
return new Queue(queueName,true);
}
以上配置有问题吗?为什么要复制队列,我想不通只是它们的功能不同
Spring-boot-version:<version>2.5.2</version>
【问题讨论】:
标签: rabbitmq spring-amqp spring-boot-2