我正在尝试在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,其中有一个例子:
我打印出了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
)
答案 0 :(得分:2)
Apache Apollo不是为了自动转换消息而构建的,具体取决于所选的消费者协议。理解这一点的关键是Apollo是下一代ActiveMQ的核心。如果Apollo项目与ActiveMQ合并,那么广泛的功能集,例如隐式转换和其他“不错的”功能,只需执行一次。
从我的角度来看,你有三种选择: