gpt4 book ai didi

jms - Apache Apollo : java openwire client doesn't consume messages from php stomp producer

转载 作者:行者123 更新时间:2023-12-04 20:12:28 24 4
gpt4 key购买 nike

我正在尝试在 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
    )

    最佳答案

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

    从我的角度来看,您有三种选择:

  • 使用Stomp in java .
  • 切换到 ActiveMQ(可能很轻松,但会降低性能)
  • 做一些手动转换——比如使用 Apache Camel 来提供 stomp 队列并生成到 JMS/OpenWire 队列。
  • 关于jms - Apache Apollo : java openwire client doesn't consume messages from php stomp producer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690929/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com