【问题标题】:How large can a message property be in HornetQ?HornetQ 中的消息属性可以有多大?
【发布时间】:2015-05-19 10:46:19
【问题描述】:

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

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

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

消息属性值有哪些注意事项?我可以让它们成为一个 100K 字节的数组吗?这会减慢速度(甚至中断)吗?

【问题讨论】:

  • FWIW,对于非常大的邮件标头,您至少需要更改一些配置。我尝试了一个 22MB 的消息属性,结果是 HornetQInternalErrorException "Record is too large to store"。

标签: performance hornetq


【解决方案1】:

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 了解更多信息。

从 cmets 中提取,您可能还希望增加日志大小和缓冲区大小。请参阅您可能已接近极限。您可能希望将日志缓冲区大小设置得更大,以确保获得一些空间,并且可能还需要调整日志本身的大小。 http://hornetq.sourceforge.net/docs/hornetq-2.1.1.Final/user-manual/en/html/persistence.html#configuring.message.journal.journal-buffer-sizehttps://developer.jboss.org/thread/154423

【讨论】:

  • 嗯。因此,只要消息仍然可以放入所涉及的每个节点的内存中,它就应该可以正常工作(只是网络吞吐量可能成为一个影响因素并且消费者窗口缓冲可能不起作用 - 但这是您可以选择的一个选项无论如何,理论都会关闭以“在多个消费者之间提供确定性分布”)?
  • 是否有我可能需要配置的最大消息大小(对于队列、消费者或生产者)?
  • 您想知道您的问题中有大约 10 万条消息。如果您正在考虑更接近内存大小的消息,您还需要考虑日志大小(默认 10M)和一些其他缓冲区。请参阅与核心 JBoss 开发人员的讨论:developer.jboss.org/thread/154423
  • 很公平。所以三个 100K 的属性(使用默认配置)应该不是问题,对吧?
  • 我没试过,但我猜大消息支持可能不太适合属性(或至少,不直观)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2014-01-19
  • 2023-03-21
  • 2018-12-31
  • 2017-04-19
  • 2013-04-17
相关资源
最近更新 更多