我正在使用HornetQ进行电子邮件发送。
使用对象存储系统将文件附件带外发送(不作为消息的一部分)。通过将小文件直接放入消息属性中,这增加了一些我希望避免的开销。
我知道我可以发送巨大的消息正文,但是对于大文件,对象存储可以很好地工作,这与小文件有关,如果可以,按属性值进行传递将非常方便。
消息属性值的注意事项是什么?我可以使它们成为100K字节数组吗?这会减慢(甚至中断)速度吗?
最佳答案
标头,属性和主体缓冲区本身都以相对简单的过程组合到了消息的整体缓冲区中,因此从该角度来看,应该不会出现重大的性能问题。您可以在此处查看核心实现:
https://github.com/hornetq/hornetq/blob/master/hornetq-core-client/src/main/java/org/hornetq/core/message/impl/MessageImpl.java
一个考虑因素是您的使用者窗口大小,默认情况下仅为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和https://developer.jboss.org/thread/154423
关于performance - HornetQ中的消息属性可以有多大?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29091759/