【问题标题】:Apache Camel AMQP - ActiveMQ AMQP header mismatch value 1, expecting 0Apache Camel AMQP - ActiveMQ AMQP 标头不匹配值 1,预期为 0
【发布时间】:2013-10-06 15:09:29
【问题描述】:

我正在尝试制作一个通过 AMQP 与 ActiveMQ 集成的 Apache Camel 应用程序。

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

活动 MQ 配置(amqp on 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>

在“camel-server.xml”中,我已将现有的“jms”“ActiveMQComponent”替换为“JmsComponent”,该“JmsComponent”引用了一个“AMQConnectionFactory”,我在其上指定了我的连接 URL(尝试了两个下面的变化)。

amqp://guest:guest@localhost/test?brokerlist='tcp://localhost:5672'
amqp://guest:guest@/?brokerlist='tcp://localhost:5672'

<bean id="jmsConnectionFactory" class="org.apache.qpid.client.AMQConnectionFactory">
    <constructor-arg index="0"
        value="amqp://guest:guest@localhost/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");

Camel Server 窗口中的错误是:

[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  

在诊断此问题时提供任何帮助。

谢谢。

【问题讨论】:

    标签: apache activemq apache-camel amqp qpid


    【解决方案1】:

    我能够通过添加以下 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 的库。

      【讨论】:

      • 嗨,约翰,您是如何解决这个问题的?您在 POM 中更新的 Maven 依赖项是什么。我正在使用带有工件 id qpid-amqp-1-0-client-jms 和 qpid-client 的 qpid 客户端版本 0.24 并面临同样的问题。
      • 嘿,很遗憾,我目前无法访问代码库。但是,您似乎为 AMQP 1.0 使用了正确的库,请确保您的工厂等使用来自该库的版本,而不是拉入较旧的 AMQP 库实体。
      猜你喜欢
      • 1970-01-01
      • 2013-07-11
      • 2020-09-08
      • 1970-01-01
      • 2014-07-20
      • 2016-04-01
      • 2023-01-20
      • 1970-01-01
      • 2014-07-24
      相关资源
      最近更新 更多