我需要同时连接多个虚拟主机,因为我想监听多个主机中的队列。默认情况下,基于配置的模式仅创建一个连接。如何创建多个连接?用注解注册侦听器时如何指定其他连接工厂?
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() + ">");
}
答案 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