【问题标题】:Apache Apollo: java openwire client doesn't consume messages from php stomp producerApache Apollo:java openwire 客户端不使用来自 php stomp 生产者的消息
【发布时间】:2013-09-12 12:15:46
【问题描述】:

我正在尝试在 Apollo 1.6 上设置一个队列,该队列将使用 STOMP 从 PHP 写入,并由 Java 使用 ActiveMQ openwire 客户端使用。

我可以从 Java 读取和写入我的队列,我可以从 PHP 读取和写入它,我可以使用 Java 编写消息并使用 PHP 读取它们,但是我不能从 PHP 写入消息并使用 Java 读取它们是我真正想做的事。

当我使用 Apollo 的管理 UI 查看队列时,我可以在我创建的测试队列中看到我使用 PHP/STOMP 和 Java/ActiveMQ 发布的所有消息。 php 消息的编解码器是 stomp,而 java 消息的编解码器是 openwire。我的 php 客户端读取这两种类型的消息,但我的 java 客户端不读取 stomp 的消息。

这是一个gist 的提炼示例:

  • Apollo.java 读写测试队列
  • send.php 写入测试队列
  • recv.php 从测试队列中读取
  • apollo.xml 是用于设置测试队列的 apollo 配置。

我打印了php接收到的StompFrames,第一个是java/openwire发布的,第二个是php/stomp的:

➜  stomp-php-1.0.0  php -f recv.php
Received from /queue/test:
StompFrame Object
(
    [command] => MESSAGE
    [headers] => Array
        (
            [destination] =>
            [content-length] => 256
            [content-type] => protocol/openwire
            [message-id] => demo-71
        )

    [body] =>�{/ID:uspdxml-drevel.local-57993-1378699215106-1:1dtestn{/ID:uspdxml-drevel.local-57993-1378699215106-1:1A�O
hello!
)
➜  stomp-php-1.0.0  php -f send.php
➜  stomp-php-1.0.0  php -f recv.php
Received from /queue/test:
StompFrame Object
(
    [command] => MESSAGE
    [headers] => Array
        (
            [message-id] => demo-81
            [destination] =>  /queue/test
        )

    [body] => world
)

【问题讨论】:

    标签: jms stomp apollo


    【解决方案1】:

    Apache Apollo 不是为根据选择的消费者协议自动转换消息而构建的。理解这一点的关键是,Apollo 被构建为下一代 ActiveMQ 的核心。如果 Apollo 项目与 ActiveMQ 合并,那么广泛的功能集(例如隐式转换和其他“不错的”功能)只需要实现一次。

    在我看来,你有三个选择:

    1. 使用Stomp in java
    2. 切换到 ActiveMQ(可能很轻松,但会降低性能)
    3. 进行一些手动转换 - 例如使用 Apache Camel 提供 stomp 队列并生成到 JMS/OpenWire 队列。

    【讨论】:

    猜你喜欢
    • 2021-06-04
    • 2015-06-04
    • 1970-01-01
    • 2019-08-18
    • 2015-09-18
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    相关资源
    最近更新 更多