在 Camel 中获取 AMQP 端点时遇到问题

Trouble getting AMQP endpoint going in Camel

我正在尝试使用 AMQP 队列作为路由的起点和终点。按照 http://camel.apache.org/amqp.html

中的示例,我无法使其正常工作

有人能给我指出正确的方向吗?

我正在 karaf 的蓝图容器中部署它。

我的设置是:

  <bean id="amqpConnectionFactory"
        class="org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl"
        factory-method="createFromURL">
    <argument value="${IssBroker.url}" />
  </bean>

  <bean id="amqpConnection"
        class="org.apache.camel.component.jms.JmsComponent" >
    <property name="connectionFactory" ref="amqpConnectionFactory"/>
  </bean>

    ...

    <route>
      <from uri="amqp:{{IssFrom.queue}}"/>
      <process ref="issPreprocessor"/>
      <unmarshal ref="IssRequest"/>
      <process ref="webServiceProcessor"/>
      <to uri="webService"/>
      <process ref="packageWebServiceReplyForIss"/>
      <to uri="amqp:{{IssTo.queue}}"/>
    </route>

当我在 karaf 中启动时,我得到:

2015-10-08 13:34:00,968 | ERROR | nsole user karaf | BlueprintCamelContext | 109 - org.apache.camel.camel-blueprint - 2.15.3 | Error occurred during starting Camel: CamelContext(myCamelContext) due connectionFactory must be specified

java.lang.IllegalArgumentException: connectionFactory must be specified
    at org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:293)
    at org.apache.camel.component.jms.JmsConfiguration.createConnectionFactory(JmsConfiguration.java:1131)
    at org.apache.camel.component.jms.JmsConfiguration.getConnectionFactory(JmsConfiguration.java:485)
    at org.apache.camel.component.jms.JmsConfiguration.createListenerConnectionFactory(JmsConfiguration.java:1140)
    at org.apache.camel.component.jms.JmsConfiguration.getListenerConnectionFactory(JmsConfiguration.java:504)
    at org.apache.camel.component.jms.JmsConfiguration.configureMessageListenerContainer(JmsConfiguration.java:967)
    at org.apache.camel.component.jms.JmsConfiguration.createMessageListenerContainer(JmsConfiguration.java:448)
    at org.apache.camel.component.jms.JmsEndpoint.createMessageListenerContainer(JmsEndpoint.java:184)
    at org.apache.camel.component.jms.JmsEndpoint.createConsumer(JmsEndpoint.java:179)
    at org.apache.camel.component.jms.JmsEndpoint.createConsumer(JmsEndpoint.java:71)
...

您的 amqpConnectionFactory bean 似乎最终为空,原因之一是您的 IssBroker.url 属性 为空或格式错误。你有没有在你的 karaf 容器中覆盖这个 属性?

更有可能的答案:

您已经为您的 JmsComponent 提供了 id amqpConnection,然后使用 amqp:${{IssFrom.queue}} 将 id 更改为 amqp 或将路由中使用的组件更改为 amqpConnection:${{IssFrom.queue}}