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ď č. 1Vyrieš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.