ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Boot无法创建多个兔子连接工厂

2019-11-11 05:21:31  阅读:362  来源: 互联网

标签:spring-amqp spring-boot spring


我正在尝试通过xml使用spring boot应用程序连接到Rabbitmq的两个不同群集并从中使用.在应用程序上下文中创建单个Rabbit:connection-factory bean时,它可以很好地工作.但是,当添加第二个时,它无法启动应用程序,并显示错误“ org.springframework.boot.autoconfigure.amqp.RabbitAnnotationDrivenConfiguration中的RabbitListenerContainerFactory方法的参数1需要单个bean,但是找到2个:”.如何为每个群集创建不同的工厂?如果不是正确的方法,请提出其他替代方法?

这是xml片段:

<rabbit:connection-factory id="firstConnectionFactory" connection-factory="firstSpringConnectionFactory"  />
<rabbit:connection-factory id="secondConnectionFactory" connection-factory="secondSpringConnectionFactory"/>
<bean id="firstSpringConnectionFactory"
class="org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean">
    <property name="useSSL" value="${rabbitmq.ssl.enabled}" />
    <property name="host" value="${rabbitmq.first.host}"/>
    <property name="virtualHost" value="${rabbitmq.vhost}"/>
    <property name="port" value="${rabbitmq.cluster.port}"/>
    <property name="username" value="${rabbitmq.user}"/>
    <property name="password" value="${rabbitmq.first.password}"/>
</bean>

<bean id="secondSpringConnectionFactory"
class="org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean">
    <property name="useSSL" value="${rabbitmq.ssl.enabled}" />
    <property name="host" value="${rabbitmq.second.host}"/>
    <property name="virtualHost" value="${rabbitmq.vhost}"/>
    <property name="port" value="${rabbitmq.cluster.port}"/>
    <property name="username" value="${rabbitmq.user}"/>
    <property name="password" value="${rabbitmq.second.password}"/>
</bean>

和侦听器容器代码:

ConnectionFactory cf = rabbitConnectionFactory;//One of the connnection factories will be injected here from app context
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(cf);
container.setConcurrentConsumers(count);
container.addQueueNames(queueName);
container.setMessageListener(listener);
container.start();

解决方法:

由于您在这里不依赖于Spring Boot,也不使用Spring AMQP注释支持,因此建议您从自动配置中选择exclude RabbitAnnotationDrivenConfiguration:

@EnableAutoConfiguration(exclude={RabbitAnnotationDrivenConfiguration.class})

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.amqp.RabbitAnnotationDrivenConfiguration

如果在项目其他位置仍需要@RabbitListener,则只能选择构建所有@EnableRabbit基础结构manually.

标签:spring-amqp,spring-boot,spring
来源: https://codeday.me/bug/20191111/2017241.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有