簡體   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