我正在尝试在 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 消息。
这是一个提炼示例的要点:
- 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
)