如何监听队列不同的虚拟主机?

时间:2019-02-22 01:45:24

标签: spring-amqp

我需要同时连接多个虚拟主机,因为我想监听多个主机中的队列。默认情况下,基于配置的模式仅创建一个连接。如何创建多个连接?用注解注册侦听器时如何指定其他连接工厂?

spring.rabbitmq.host=10.0.0.0
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=test
spring.rabbitmq.virtual-host=ABC

如何在多个注册的侦听器中指定连接工厂?

@RabbitListener(queues = Constants.QUEUE_NAME)
    public void receiveMessage(Test message) {
        System.out.println("Received <" + message.getA() + ">");
}

1 个答案:

答案 0 :(得分:0)

目前无法仅通过属性来实现。您必须定义多个<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> <div id="root"></div> CachingConnectionFactory和多个侦听器容器工厂bean,每个都指向每个连接工厂。

或者,您可以使用@Bean as described in the documentation,可以将其配置为根据侦听器队列名称使用特定的连接工厂。

我们有一个open issue添加了对多个工厂自动配置的支持。

作者有a project that might help you

如果要与多个集装箱工厂一起去...

RoutingConnectionFactory注释具有以下选项:

@RabbitListener

因此,您可以为/** * The bean name of the {@link org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory} * to use to create the message listener container responsible to serve this endpoint. * <p>If not specified, the default container factory is used, if any. * @return the {@link org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory} * bean name. */ String containerFactory() default ""; 声明一个bean,然后在其中注入任何自定义RabbitListenerContainerFactory

ConnectionFactory

实际上是每个连接工厂只有一个/** * @param connectionFactory The connection factory. * @see AbstractMessageListenerContainer#setConnectionFactory(ConnectionFactory) */ public void setConnectionFactory(ConnectionFactory connectionFactory) {

virtual host

在Google文档中查看有关自定义/** * Set the virtual host. * @param virtualHost the virtual host to use when connecting to the broker */ public void setVirtualHost(String virtualHost) { 的更多信息:https://docs.spring.io/spring-amqp/docs/2.1.4.RELEASE/reference/#using-container-factories