Memory ActiveMQ主题内存使用

Memory ActiveMQ主题内存使用,memory,activemq,publish-subscribe,Memory,Activemq,Publish Subscribe,我需要发布大量的[仅标题]消息,每个消息都属于一个唯一的类别。考虑: A.B.C.D.E.F 理想情况下,抛开所有其他考虑因素不谈,我希望发布每一条消息都有自己的主题,但这可能会导致数千个主题。好处是一个非常简单的基于通配符的订户模型。我只是不确定单个主题的基线内存使用量是多少,以及数千个主题的合计使用量是多少 对于调优,主题将是非持久性和非持久性的。如果可能的话,我还可以将消息数量限制为一次1条,这样会删除旧消息。消息将每隔n秒(通常>15s)以波浪形式发布。这将减少内存使用 我的另一种选择

我需要发布大量的[仅标题]消息,每个消息都属于一个唯一的类别。考虑:

A.B.C.D.E.F
理想情况下,抛开所有其他考虑因素不谈,我希望发布每一条消息都有自己的主题,但这可能会导致数千个主题。好处是一个非常简单的基于通配符的订户模型。我只是不确定单个主题的基线内存使用量是多少,以及数千个主题的合计使用量是多少

对于调优,主题将是非持久性和非持久性的。如果可能的话,我还可以将消息数量限制为一次1条,这样会删除旧消息。消息将每隔n秒(通常>15s)以波浪形式发布。这将减少内存使用

我的另一种选择是根据前两部分发布主题,如:

A.B

并将其余的段放在键控标题中。然后订阅者将不得不使用主题通配符和选择器的组合来订阅他们想要的提要

有人对此有什么见解吗

谢谢


//Nicholas

我设置了一个测试来测量主题的实际内存消耗。简言之:

  • 我使用大量的主题启动一个循环,这些主题是通过JMS会话动态创建的
  • 在内部循环中,我调用System.gc(),然后测量所使用的堆空间。用10秒的时间完成10次。在每个内部循环结束时暂停
  • 我计算在内部循环中采样的平均堆使用率
  • 我将基本主题数增加100
  • 结果如下:

    总之,每个主题消耗了大约29.5 KB的堆空间。请注意,我没有花费太多精力来调整主题的目标策略,这可能会在某种程度上降低这一点

    总的来说,我不认为这是坏的,但我不认为它会扩展到我想要的数字,所以我使用Camel采取了一种不同的方法(如所建议的)

    基本上,当客户机使用主题通配符订阅时,我正在缓存模式。当Camel使用者接收到一条[non-jms]消息时,它会检查缓存,如果该消息与缓存中的任何通配符项匹配,它将发布到相应的主题(将动态创建)。一旦主题停止接收发布(因为缓存中删除了匹配的通配符),该主题将超时并被“GC”删除

    效果相当好


    //Nicholas

    您是否考虑过使用Camel来实现此逻辑…似乎是一个很好的选择