在 HornetQ 中一条消息 属性 可以有多大?

How large can a message property be in HornetQ?

我正在使用 HornetQ 发送电子邮件。

文件附件使用对象存储系统进行带外传输(不作为消息的一部分)。这会增加一些开销,我想通过将小文件直接放入消息属性来避免这些开销。

我知道我可以发送巨大的消息体,但是对于大文件,对象存储效果很好,这是关于小文件的,如果可以的话,属性值传递会很方便。

消息 属性 值的注意事项是什么?我可以让它们成为 100K 字节的数组吗?这会减慢速度(甚至崩溃)吗?

Headers、属性和 Body 缓冲区本身都在相对简单的过程中组合到消息的整体缓冲区中,因此从这个角度来看应该不会有重大的性能问题。你可以在这里看到核心实现: https://github.com/hornetq/hornetq/blob/master/hornetq-core-client/src/main/java/org/hornetq/core/message/impl/MessageImpl.java

一个考虑因素是您的消费者 window 大小,默认情况下仅为 1MB。这是消费者缓冲的大小,因此如果您发送接近此大小的消息,您在等待消费者数据时的读取性能可能会慢得多。这可以使用 consumer-window-size 参数更改。有关详细信息,请参阅 http://docs.jboss.org/hornetq/2.4.0.Final/docs/user-manual/html/flow-control.html#d0e4023

根据评论,您可能还想增加日志大小和缓冲区大小。看到你可能接近极限。您可能希望将日志缓冲区大小设置得更大,以确保获得一些净空,并且可能还需要调整日志本身的大小。 http://hornetq.sourceforge.net/docs/hornetq-2.1.1.Final/user-manual/en/html/persistence.html#configuring.message.journal.journal-buffer-size and https://developer.jboss.org/thread/154423