2013-02-20 154 views
1

我使用ruby stomp gem將消息發送給ActiveMQ。數據以Base64編碼形式存儲,而不是以文本的形式存儲,這與我使用XPath選擇器的能力有關!當通過STOMP發送時,ActiveMQ將消息存儲在Base64中?

我已經證實,在碼頭內使用「發送」功能,我可以將非Base64編碼文本發送到同一個隊列。

有關如何阻止這種情況發生的任何建議?


我的測試代碼:

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 
}) 

然後我就可以訪問ActiveMQ的演示,看看有什麼實際存儲:

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

輸出:

<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> 
+0

我一直在挖掘這一段時間,它看起來好像Ruby STOMP gem自動添加內容長度標題字段。 [This ActiveMQ](http://activemq.apache.org/stomp.html)文檔頁面指出,包含內容長度頭文件會通知activeMQ STOMP連接器該消息應該是BytesMessage(而不是TextMessage) - 我要檢查這個並在這裏發帖 – 2013-02-20 15:26:48

回答

2

我已經解決了我自己的問題 - 這是一個wh的細分它正在發生。

ActiveMQ假定帶有content-length標頭的任何傳入STOMP消息是ByteMessage,並且沒有該標頭的任何消息都是TextMessage(reference material)。

Ruby的stomp gem試圖考慮到這一點,但他們實現的頭文件編碼方法打破了他們自定義頭文件的測試::suppress_content_length,它完成了它所說的。

我已經分叉&修改了它們的代碼來解決這個問題 - 請參閱my stomp repo - 希望它們能很快折入。