我正在使用HornetQ进行电子邮件发送。
使用对象存储系统在带外(不作为消息的一部分)传输文件附件。通过直接将它们放入消息属性,这增加了我想避免的小文件开销。
我知道我可以发送大量的邮件正文,但对于大型文件,对象存储效果很好,这是关于小文件的,如果有效的话,按属性值传递将非常方便。
邮件属性值有哪些注意事项?我可以让它们成为100K字节数组吗?这会减慢(甚至破坏)吗?
答案 0 :(得分:3)
Headers,Properties和Body缓冲区本身都以相对简单的过程组合到消息的整体缓冲区中,因此从这个角度来看不应该存在重大的性能问题。您可以在此处查看核心实施: 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