2013-02-20 65 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 - 希望它们能很快折入。

相关问题