当使用系统属性和SpEL配置RabbitMQ队列时,为什么Spring崩溃了“没有bean命名..被定义”?

时间:2014-12-20 16:40:04

标签: spring-amqp

我的上下文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属性'destinationQueue';嵌套异常是   org.springframework.beans.factory.NoSuchBeanDefinitionException:不   名为'queue1'的bean已定义   [...]

当我要么停止异常:

  • <rabbit:queue ...>元素更改为<rabbit:queue name="queue1" />
  • 注释掉<rabbit:fanout-exchange ...>元素。

这是Spring Integration版本4.1.1

为什么会这样?这可能与this bug相关吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

你不对。请参阅binding的{​​{1}}属性文档:

  

要绑定到此交换的队列的bean名称。

因此,您应该将queue添加到id,并将其用作<rabbit:queue> binding属性的值。