2013-09-30 46 views
1

我正在尝试制作一个与ActiveMQ over AMQP集成的Apache Camel应用程序。Apache Camel AMQP - ActiveMQ AMQP头不匹配值1,期待0

我一直在提供'camel-example-spring-jms'项目,该项目已通过标准TCP连接,但我已修改为使用独立的ActiveMQ 5.8安装(而不是嵌入式),它我正在使用TCP工作正常。

主动MQ配置(AMQP在5672

<transportConnectors> 
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61610?maximumConnections=1000&amp;wireformat.maxFrameSize=104857600"/> 
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireformat.maxFrameSize=104857600"/> 
</transportConnectors> 

在 '骆驼的server.xml' 我已经取代现有的 “JMS” 'ActiveMQComponent' 与引用了一​​个 'JmsComponent' 'AMQConnectionFactory',我在其中指定了我的连接URL(尝试了以下两种变体)。

amqp://guest:[email protected]/test?brokerlist='tcp://localhost:5672' 
amqp://guest:[email protected]/?brokerlist='tcp://localhost:5672' 

<bean id="jmsConnectionFactory" class="org.apache.qpid.client.AMQConnectionFactory"> 
    <constructor-arg index="0" 
     value="amqp://guest:[email protected]/test?brokerlist='tcp://localhost:5672'" /> 
</bean> 
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> 
    <property name="connectionFactory" ref="jmsConnectionFactory" /> 
<property name="useMessageIDAsCorrelationID" value="true" /> 
</bean> 

服务器似乎开始罚款与上述的配置,但是当我在“ServerRoutes.java”添加路由到AMQP队列我启动时获取一个错误。

from("amqp:queue:numbers").to("multiplier"); 

在骆驼服务器窗口中的错误是:

[nsumer[numbers]] INFO AMQConnection - to broker at tcp://localhost:5672 
org.apache.qpid.AMQException: Cannot connect to broker: connect() aborted [error code 200: reply success] 

而在我的ActiveMQ窗口的错误是:

org.apache.activemq.transport.amqp.AmqpProtocolException: Could not decode AMQP frame: hex: 414d51500101000a 
Caused by: org.apache.qpid.proton.engine.TransportException: AMQP header mismatch value 1, expecting 0 

任何帮助诊断这个问题appreicated。

谢谢。

回答

0

我能得到这个通过添加下列MVN依赖的工作:

<dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-amqp</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.geronimo.specs</groupId> 
     <artifactId>geronimo-jms_1.1_spec</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.qpid</groupId> 
     <artifactId>qpid-amqp-1-0-client-jms</artifactId> 
     <version>0.24</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.qpid</groupId> 
     <artifactId>qpid-amqp-1-0-client</artifactId> 
     <version>0.24</version> 
    </dependency> 

并使用此连接工厂:

<bean id="jmsConnectionFactory" class="org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl" factory-method="createFromURL"> 
<constructor-arg index="0" type="java.lang.String" value="amqp:///?brokerlist='tcp://localhost:5672''" /> 

2

好吧,经过大量的阅读后,我认为ActiveMQ是AMQP 1.0的实现,我似乎在使用使用AMQP 0.10的库。

+0

嘿,约翰,所以你怎么纠正问题?您在POM中更新的Maven依赖项是什么?我使用qpid客户端版本0.24与工件ID qpid-amqp-1-0-client-jms和qpid-client并面临相同的问题。 – Soham

+0

嘿,不幸的是,我目前无法访问代码库。不过,您似乎正在使用AMQP 1.0的正确库,请确保您的工厂等使用的是来自该库的版本,而不是拉入较旧的AMQP库实体。 –