/ / ActiveMQ ukladá správy v Base64 pri odosielaní cez STOMP? - rubínový, aktivačný, stomp

Ak sa ActiveMQ ukladá správy v databáze Base64 pri odosielaní cez STOMP? - ruby, activemq, stomp

Na odosielanie správ do systému ActiveMQ používam klenot ruby ​​stomp. Dáta sa ukladajú skôr vo forme kódovanej Base64, nie ako text, čo je v rozpore s mojou schopnosťou používať selektory XPath!

Potvrdil som, že pomocou funkcie „odoslať“ v móde môžem poslať text, ktorý nie je kódom Base64, do rovnakej fronty.

Máte nejaké návrhy, ako tomu zabrániť?


Môj testovací kód:

require "stomp"

stomp = {
:hosts => [{:host => "localhost", :port => 61613}]
}

client = Stomp::Client.new(stomp)

queue = "/queue/test"
xml = "<?xml version="1.0" encoding="utf-8" ?>n<test>xml</test>"

client.publish(queue,xml,{
:"content-type" => "application/xml",
:persistent     => true
})

Potom môžem navštíviť ukážky ActiveMQ a zistiť, čo sa skutočne ukladá:

 http://127.0.0.1:8161/demo/queueBrowse/test?view=xml

Výkon:

<messages queue="queue://test">
<!-- snip -->
<content>
<data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cjx0ZXN0PnhtbDwvdGVzdD4A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA=</data>
<offset>0</offset>
<length>56</length>
</content>
<!-- snip -->
</messages>

odpovede:

3 pre odpoveď č. 1

Vyriešil som svoj vlastný problém - tu je rozpis, prečo k tomu došlo.

ActiveMQ predpokladá, že každá prichádzajúca správa STOMP s a content-length header je ByteMessage a akýkoľvek bez tejto hlavičky je TextMessage (referenčný materiál).

Ruby "s Stomp Gem snaží sa to zohľadniť, ale metóda kódovania hlavičiek, ktorú implementovali, preruší svoje vlastné testy pre vlastnú hlavičku: :suppress_content_length, čo robí to, čo hovorí na plechovke.

Rozvetvil som a upravil som ich kód, aby to vyriešil - pozri môj stomp repo - ktoré sa, dúfajme, dostanú do záhybu.