amqp和camel错误:路由没有输入

时间:2013-01-07 14:30:40

标签: java spring apache-camel amqp spring-amqp

我遇到了与Camel溃败的问题。这是我的配置文件,非常简单:

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://10.211.55.20:5672"/>
</bean>

<camel:camelContext xmlns="http://camel.apache.org/schema/spring">

    <jmxAgent id="agent" createConnector="false" disabled="true"/>

    <camel:route>
        <route>
            <from uri="activemq:hello?destination.consumer.exclusive=true&amp;destination.consumer.prefetchSize=50"/>
            <to uri="stream:out"/>
        </route>
    </camel:route>
</camel:camelContext>

在这种情况下,我使用RabbitMQ,hello是队列名称。

运行它,我收到此错误消息:

Invocation of init method failed; nested exception is java.lang.IllegalArgumentException:  Route has no inputs: Route[[] -> [Route[[From[activemq:hello?destination.consumer.exclusive=true&destination.consumer.prefetchSize=50]] -> [To[stream:out]]]]]

有什么想法吗?我在哪里可以获得Camel + RabbitMQ的样本或教程?

---更新---

根据以下评论的建议,我修复了配置,并且已经完成了一小步。现在它似乎能够连接到队列但是,如果我尝试编写,我得“必须指定camelContext”异常

<bean id="messageConverter" class="amqp.spring.converter.XStreamConverter"/>

<rabbit:connection-factory id="connectionFactory" host="10.211.55.20" port="5672" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" message-converter="messageConverter" exchange="amq.fanout" />
<rabbit:admin connection-factory="connectionFactory"/>
<rabbit:queue name="hello"  />

<camel:camelContext xmlns="http://camel.apache.org/schema/spring">
    <camel:route>
        <camel:from uri="file:src/data?noop=true" />
        <camel:log message="Log!"/>
        <camel:to uri="spring-amqp:amq.fanout:hello"/>
    </camel:route>
</camel:camelContext>

感谢,
安德烈

2 个答案:

答案 0 :(得分:0)

有两个错误。首先,XML似乎缺少路由上的命名空间:

<camel:route>
   <route>
        <from uri="activemq:hello?destination.consumer.exclusive=true&amp;destination.consumer.prefetchSize=50"/>
        <to uri="stream:out"/>
    </route>

应该是:

<camel:route>
   <camel:route>
        <camel:from uri="activemq:hello?destination.consumer.exclusive=true&amp;destination.consumer.prefetchSize=50"/>
        <camel:to uri="stream:out"/>
    </camel:route>

然后,RabbitMQ目前与ActiveMQ并不真正兼容。 ActiveMQ的5.8版本似乎支持RabbitMQ使用的AMQP协议,但是如果它将在Camel组件中得到支持或者如果它将与RabbitMQ兼容则是另一个问题。我不知道。

Camel中还有一个AMQP组件。它使用Apache QPID客户端,我没有运气用RabbitMQ运气。如果你深入挖掘使用某些特定版本等(http://www.rabbitmq.com/interoperability.html),它可能会在某种程度上起作用。

答案 1 :(得分:0)

我有同样的问题。事实证明我已经堆叠了route s。 所以,而不是

<camel:route>
   <route>
        <from uri="activemq:hello?destination.consumer.exclusive=true&amp;destination.consumer.prefetchSize=50"/>
        <to uri="stream:out"/>
    </route>

跳过附上的<route>