当通过STOMP发送时,ActiveMQ在Base64中存储消息?

时间:2013-02-20 14:14:27

标签: ruby activemq stomp

我正在使用ruby stomp gem向ActiveMQ发送消息。数据以Base64编码形式存储,而不是文本,这使我无法使用XPath选择器!

我已经确认使用jetty中的'send'功能,我可以将非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>

1 个答案:

答案 0 :(得分:3)

我已经解决了我自己的问题 - 这里是它发生原因的细分。

ActiveMQ假定任何带有content-length标头的传入STOMP消息都是ByteMessage,没有该标头的任何消息都是TextMessage(reference material)。

Ruby的stomp gem尝试考虑到这一点,但是他们实现的标头编码方法打破了他们自己的自定义标头测试::suppress_content_length,它完成了它在锡上的说法。 / p>

我已经分叉了修改了他们的代码来解决这个问题 - 请参阅my stomp repo - 希望他们很快就会弃牌。