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】:是的,您可以使用RabbitAdmin
和admin.getQueueProperties()
查看队列是否存在,并使用admin.declareQueue(new Queue(...))
添加队列。您可能应该跟踪您已经检查/创建了哪些,以避免每次发送的开销。
您还可以使用管理员添加交换并将队列绑定到它们。
【讨论】:
以上是关于Spring RabbitTemplate - 如何在发送时自动创建队列的主要内容,如果未能解决你的问题,请参考以下文章
Rabbitmq与spring整合之重要组件介绍——AMQP声明式配置&RabbitTemplate组件
如果我在RabbitTemplate上直接设置它们,为什么Spring需要在Converter和ClassMapper上使用@Bean?
RabbitTemplate 连接到 RabbitMQ:获取 - NOT_FOUND - 无队列