在主题订阅者使用主题消息后它们是否出现了?(AMQ 5.3.1)

时间:2011-11-18 15:48:28

标签: memory-leaks jms messaging activemq

我有jms主题,可能有0,1,2个订阅者(意味着某些订阅者可能已关闭或停止)。 我有生产者不断向主题发送消息,我可以看到消息在主题中排队,我看到有订阅者,我看到我的消费者正在接收消息。但是从activemq web admin intefrace我看到没有消息出列。此外,从heapdump我看到,当时主题中的消息正在增加,但消费者正在慢慢消耗它们,并且生产者正在更快地发送消息。所以过了一段时间我就失去了记忆。

我的问题是,如果消息没有出列,这是否意味着他们在主题中,并且由于计数增长,内存正在增加?我该如何解决这个问题?

来自activemq admin intefrace的副本: 名称消费者数量消息排队的消息排队 TEST_TOPIC 1 26490 0

1 个答案:

答案 0 :(得分:1)

默认情况下,消息将存储在您在配置文件中配置的持久性存储中,但只要:

  • 有对此类消息的有效订阅
  • 对这种消息有持久的订阅(消费者)。

如果您以与生成邮件相同(或更高)的费率消费邮件时遇到问题,您有以下几种可能:

  • flow control
  • Pending Message Limit Strategy(它允许您配置代理除了预取缓冲区之外还将为消费者保留的最大匹配消息数。达到此最大值后,当新消息进入时,旧消息将被丢弃)
  • Time to live您的邮件。您基本上设置了您的消息有效期,经纪人会在他们达到该生存时间时将其丢弃。

在您的情况下,我将实施上述3种策略中的一种。我个人会选择第二个(待定消息限制策略)。