为什么在使用系统属性和 SpEL 配置 RabbitMQ 队列时,Spring 会因"No bean named .. is defined"而崩溃?



我的上下文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

为什么会这样?这可能与此错误有关吗?

非常感谢!

你说得不对。请参阅 bindingqueue属性文档:

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

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

相关内容

最新更新