【问题标题】:Several queueNames for Rabbit in SpringSpring 中 Rabbit 的几个 queueNames
【发布时间】:2021-10-28 22:18:52
【问题描述】:

这是我的 Spring 应用程序的兔子 yml.config:

event.rabbit:
  host: {{ params.app_properties.mq_host }}
  port: {{ params.app_properties.mq_port }}
  username: ${mq_username}
  password: ${mq_password}
  virtual-host: {{ params.app_properties.mq_vhost }}
  exchange.name: {{ params.app_properties.mq_exchange }}
  queue.name: {{ params.app_properties.event_rabbit_queue_name}}

是否可以让rabbit监听多个主机的多个队列?

【问题讨论】:

    标签: spring-boot rabbitmq spring-amqp spring-rabbit rabbitmq-exchange


    【解决方案1】:

    Spring AMQP 中的ListenerContainerFactoryBean(作为顶层)抽象,可以配置多个队列来消费:

    public void setQueueNames(String... queueName) {
        this.queueNames = queueName;
    }
    
    public void setQueues(Queue... queues) {
        this.queues = queues;
    }
    

    AbstractConnectionFactory上可以提供多个主机:

    /**
     * Set addresses for clustering.
     * This property overrides the host+port properties if not empty.
     * @param addresses list of addresses with form "host[:port],..."
     */
    public synchronized void setAddresses(String addresses) {
    

    但是正如您所见,它们都必须在集群中,因此所有这些队列必须在所有这些集群成员上进行镜像,以便您的解决方案具有容错行为。

    您显示的属性似乎与 Spring Boot 自动配置无关,但这里是要调查的相应 RabbitProperties

    注意:如果您只是实现消费者端,则不需要知道交换。您总是从特定队列中消费。交换是生产者如何分发和传递您发送的消息的问题。

    【讨论】:

      【解决方案2】:

      我已经用 MQ 做到了, 但从来没有和兔子在一起。 MQ 解决方案似乎仍然适用于 Rabbit。

      1. 为每个服务器创建一个不同的ConnectionFactory (使用您自己的配置属性设置,而不是默认的 Rabbit)。
      2. 为每个服务器创建一个ContainerFactory, 请参阅侦听器注释中的 connectionFactory。 手动将 containerFactory 中的 connectionFactory 设置为“正确的”connectionFactory(由正确的服务器定义)。
      3. 请参阅侦听器注释中的侦听队列名称。
      4. 为每个服务器创建一个 jmsTemplate, 与 containerFactory 一样, 手动将 jmsTemplate 中的 connectionFactory 设置为“正确”值。 还, 为每个 jmsTemplate 设置一个唯一的限定符值。
      5. 注入 JmsTemplate 时, 请参阅限定符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 2018-03-02
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多