如何在SpringXML中定义多个rabbit:template?
How to define multiple rabbit:template in Spring XML?
我在spring中定义了两个rabbit:template xml:
<bean id="application.startup.status" class="org.springframework.amqp.remoting.client.AmqpProxyFactoryBean">
<property name="serviceInterface" value="com.xxx.services.IStartupStatusService"/>
<property name="amqpTemplate" ref="rmqTemplate_application_startup_status"/>
</bean>
<rabbit:template id="rmqTemplate_application_startup_status" connection-factory="rmqConnectionFactory" reply-timeout="2000"
routing-key="remoting.application_startup_status"
exchange="remoting.exchange.application_startup_status"/>
<rabbit:queue name="application_startup_status" />
<rabbit:direct-exchange name="remoting.exchange.application_startup_status">
<rabbit:bindings>
<rabbit:binding queue="application_startup_status" key="remoting.application_startup_status" />
</rabbit:bindings>
</rabbit:direct-exchange>
<bean id="application.root.status" class="org.springframework.amqp.remoting.client.AmqpProxyFactoryBean">
<property name="serviceInterface" value="com.xxx.services.IRootStatusService"/>
<property name="amqpTemplate" ref="rmqTemplate_application_root_status"/>
</bean>
<rabbit:template id="rmqTemplate_application_root_status" connection-factory="rmqConnectionFactory" reply-timeout="2000"
routing-key="remoting.application_root_status"
exchange="remoting.exchange.application_root_status"/>
<rabbit:queue name="application_root_status" />
<rabbit:direct-exchange name="remoting.exchange.application_root_status">
<rabbit:bindings>
<rabbit:binding queue="application_root_status" key="remoting.application_root_status" />
</rabbit:bindings>
</rabbit:direct-exchange>
当 运行 我的应用程序出现错误时:
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.amqp.rabbit.core.RabbitTemplate' available: expected single matching bean but found 3: rmqTemplate_application_startup_status, rmqTemplate_application_root_status
我根据第 http://docs.spring.io/spring-amqp/reference/htmlsingle/#remoting 页中的示例写下此 Spring XML。如何解决这个问题?
使用id
作为变量名and/or使用@Qualifier
.
@Autowired
@Qualifier("rmqTemplate_application_root_status")
private RabbitTemplate rootStatusTemplate;
或
<rabbit:template id="rootStatusTemplate" ...
@Autowired
private RabbitTemplate rootStatusTemplate;
我在spring中定义了两个rabbit:template xml:
<bean id="application.startup.status" class="org.springframework.amqp.remoting.client.AmqpProxyFactoryBean">
<property name="serviceInterface" value="com.xxx.services.IStartupStatusService"/>
<property name="amqpTemplate" ref="rmqTemplate_application_startup_status"/>
</bean>
<rabbit:template id="rmqTemplate_application_startup_status" connection-factory="rmqConnectionFactory" reply-timeout="2000"
routing-key="remoting.application_startup_status"
exchange="remoting.exchange.application_startup_status"/>
<rabbit:queue name="application_startup_status" />
<rabbit:direct-exchange name="remoting.exchange.application_startup_status">
<rabbit:bindings>
<rabbit:binding queue="application_startup_status" key="remoting.application_startup_status" />
</rabbit:bindings>
</rabbit:direct-exchange>
<bean id="application.root.status" class="org.springframework.amqp.remoting.client.AmqpProxyFactoryBean">
<property name="serviceInterface" value="com.xxx.services.IRootStatusService"/>
<property name="amqpTemplate" ref="rmqTemplate_application_root_status"/>
</bean>
<rabbit:template id="rmqTemplate_application_root_status" connection-factory="rmqConnectionFactory" reply-timeout="2000"
routing-key="remoting.application_root_status"
exchange="remoting.exchange.application_root_status"/>
<rabbit:queue name="application_root_status" />
<rabbit:direct-exchange name="remoting.exchange.application_root_status">
<rabbit:bindings>
<rabbit:binding queue="application_root_status" key="remoting.application_root_status" />
</rabbit:bindings>
</rabbit:direct-exchange>
当 运行 我的应用程序出现错误时:
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.amqp.rabbit.core.RabbitTemplate' available: expected single matching bean but found 3: rmqTemplate_application_startup_status, rmqTemplate_application_root_status
我根据第 http://docs.spring.io/spring-amqp/reference/htmlsingle/#remoting 页中的示例写下此 Spring XML。如何解决这个问题?
使用id
作为变量名and/or使用@Qualifier
.
@Autowired
@Qualifier("rmqTemplate_application_root_status")
private RabbitTemplate rootStatusTemplate;
或
<rabbit:template id="rootStatusTemplate" ...
@Autowired
private RabbitTemplate rootStatusTemplate;