Spring RabbitTemplate - 如何在发送时自动创建队列

Posted

技术标签:

【中文标题】Spring RabbitTemplate - 如何在发送时自动创建队列【英文标题】:Spring RabbitTemplate - How to create queues automatically upon send 【发布时间】:2018-04-02 23:50:05 【问题描述】:

我将 RabbitMQ 与 Spring 的 RabbitTemplate 一起使用。

当使用模板发送方法向队列发送消息时,我希望队列不存在时自动创建/声明。

这非常重要,因为根据我们的业务逻辑,队列名称是在运行时生成的,我无法提前声明它们。

之前我们使用 JmsTemplate 并且任何发送或接收的调用都会自动创建队列。

【问题讨论】:

【参考方案1】:

您可以使用 RabbitAdmin 自动声明交换、队列和绑定。查看this 线程了解更多详情。这个forum 也与您的场景有关。虽然我还没有尝试过使用 AMQP 的 spring,但我相信这会做到。

/**
 * Required for executing adminstration functions against an AMQP Broker
 */
@Bean
public AmqpAdmin amqpAdmin() 
    return new RabbitAdmin(connectionFactory());

继续编码!

【讨论】:

【参考方案2】:

是的,您可以使用RabbitAdminadmin.getQueueProperties() 查看队列是否存在,并使用admin.declareQueue(new Queue(...)) 添加队列。您可能应该跟踪您已经检查/创建了哪些,以避免每次发送的开销。

您还可以使用管理员添加交换并将队列绑定到它们。

【讨论】:

以上是关于Spring RabbitTemplate - 如何在发送时自动创建队列的主要内容,如果未能解决你的问题,请参考以下文章

Rabbitmq与spring整合之重要组件介绍——AMQP声明式配置&RabbitTemplate组件

如果我在RabbitTemplate上直接设置它们,为什么Spring需要在Converter和ClassMapper上使用@Bean?

RabbitTemplate 连接到 RabbitMQ:获取 - NOT_FOUND - 无队列

RabbitMQ 请求/响应“RabbitTemplate 未配置为侦听器”

Spring Boot整合RabbitMQ

SpringBoot整合多个RabbitMQ