繁体   English   中英

ActiveMQ / PHP Stomp使用TextMessage而不是BytesMessage

[英]ActiveMQ / PHP Stomp use TextMessage instead of BytesMessage

当我使用PHP-Stomp向ActiveMQ发送消息时,消息将作为BytesMessage发送。 但是我想发送一个TextMessage。

根据STOMP文档,这可以通过不发送内容长度标题来实现:

...但协议支持内容长度标头。 为了在Stomp和JMS客户端之间提供更强大的交互,ActiveMQ键入了包含此标头以确定从Stomp发送到JMS时​​要创建的消息类型。 逻辑很简单:

包含content-length header =>生成的消息

是=> BytesMessage

no => TextMessage

从JMS到Stomp也可以遵循相同的逻辑。 可以编写Stomp客户端以包含内容长度头以确定要向用户提供什么类型的消息结构。

在我的测试PHP脚本中,我没有定义内容长度标题,它似乎是自动添加的。 我也尝试将content-length传递为0,false或null。 在所有这些情况下,它都会生成BytesMessage。

所以我的问题是, 如何生成Textmessage而不是BytesMessage

我的代码如下所示:

<?php

$stomp = new Stomp('tcp://localhost:61613');
$stomp->send('/topic/test.central_message_topic', 'testmessage', [
    "persistent" => "true",
]);

这已经很久了,但这对我有用:

try {  
$stomp->send("your_queue", "your_message", array("amq-msg-type" => "text"));
} catch (StompException $e) {  
die('send failed: ' . $e->getMessage());
}

我找到了答案。

TL; DR:这是不可能的。

使用PECL-Stomp时,不能发送内容长度标头,因为它是在发送请求时自动创建的。 如果你传递reuqest将包含两个内容长度标题。

供参考源代码

添加转换标头,与activemq一起使用:

$stomp->send('/queue/pizzamonsters', json_encode($frame), [
    'transformation' => 'TEXT'
]);
<?php
$stomp = new Stomp('tcp://localhost:61613');
$stomp->send('/topic/test.central_message_topic', 'testmessage', ["content-type" =>"text/plain"]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM