【问题标题】:Connecting to queue or creating on non-existence in spring-rabbitmq在 spring-rabbitmq 中连接到队列或创建不存在
【发布时间】:2017-03-25 16:02:09
【问题描述】:

我正在使用带有 spring-rabbitmq 的 Spring Boot。我的连接工厂是在application.properties 中配置的,看起来不错。

我的目标是:开始检查是否存在特定名称的队列,如果不存在则创建这样的队列。我不知道如何处理它。我应该在配置类中创建什么 bean?从我读到的应该是 RabbitAdmin,但我不确定。你能帮助我吗?

【问题讨论】:

标签: java spring-boot spring-amqp spring-rabbit


【解决方案1】:

Reference Manual 中的所有内容都描述得很清楚:

AMQP 规范描述了如何使用该协议在代理上配置队列、交换和绑定。这些可从 0.8 及更高版本移植的操作存在于 org.springframework.amqp.core 包的 AmqpAdmin 接口中。

还有:

当 CachingConnectionFactory 缓存模式为 CHANNEL(默认)时,RabbitAdmin 实现会自动延迟声明在同一 ApplicationContext 中声明的队列、交换和绑定。

因此,您应该在应用程序上下文中声明 QueueExchangeBinding bean,AmqpAdmin 将注意它们在目标代理上的定义。

需要注意的是,根据AMQP协议,如果实体已经存在于Broker上,则声明只是静默和幂等的。

因此,在您的情况下,您无需担心队列的存在,只需在应用程序上下文中将它们的声明作为 bean 提供。

【讨论】:

  • 太不可思议了,spring-amqp 非常棒,每个默认设置都是合理的,并且有简单的配置方法。
  • 嗨,Artem,很遗憾,docs.spring.io/spring-amqp/reference/html/… 的链接已失效。
  • 我们有一个应用程序 A 声明它自己的队列,但另一个应用程序 B 从应用程序 A 侦听该队列,因为我们在 B 端有 Spring 的 Queue 它试图声明它但定义不同所以它失败说它不能修改现有的队列。如何禁用 B 上的自动声明?
  • 可能您的问题值得拥有自己的 SO 线程,并提供更多详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2022-06-10
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多