我的上下文XML中有以下代码(除其他外(:
<rabbit:queue name="#{systemProperties.consumer1Queue}" />
<rabbit:fanout-exchange name="si.test.exchange">
<rabbit:bindings>
<rabbit:binding queue="#{systemProperties.consumer1Queue}"/>
</rabbit:bindings>
</rabbit:fanout-exchange>
我首先使用 mvn compile
编译它。然后,当我想用mvn -Dconsumer1Queue=queue1 exec:java
运行它时,它会抛出:
原因:org.springframework.beans.factory.BeanCreationException: 创建带有名称的 Bean 时出错 'org.springframework.amqp.rabbit.config.BindingFactoryBean#0':不能 解析对 bean '#{systemProperties.consumer1Queue}' 的引用,而 设置 Bean 属性"目的地队列">;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No 名为"queue1"的 Bean 定义在 [...]
当我出现以下任一情况时,异常将停止发生:
- 将
<rabbit:queue ...>
元素更改为<rabbit:queue name="queue1" />
,或 - 注释掉
<rabbit:fanout-exchange ...>
元素。
这是 Spring 集成版本 4.1.1
为什么会这样?这可能与此错误有关吗?
非常感谢!
你说得不对。请参阅 binding
的queue
属性文档:
要绑定到此交换的队列的 Bean 名称。
因此,您应该将id
添加到<rabbit:queue>
中,并将其用作binding
的queue
属性的值。