【问题标题】:ActiveMQ storing messages in Base64 when sent via STOMP?ActiveMQ 在通过 STOMP 发送时将消息存储在 Base64 中?
【发布时间】:2013-02-05 13:55:01
【问题描述】:

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

我已经确认使用 jetty 中的“发送”功能可以将非 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>

【问题讨论】:

  • 我已经研究了一段时间,看起来 Ruby STOMP gem 正在自动添加内容长度标题字段。 This ActiveMQ 文档页面指出,包含 content-length 标头将通知 activeMQ STOMP 连接器该消息应该是 BytesMessage(而不是 TextMessage) - 我要检查一下并在此处发布

标签: ruby activemq stomp


【解决方案1】:

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

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

Ruby 的 stomp gem 试图考虑到这一点,但他们实现的标头编码方法破坏了他们自己对自定义标头的测试::suppress_content_length,它确实做到了。

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

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 2019-07-02
    • 1970-01-01
    • 2010-09-28
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多