Broker Network充斥着未消耗的ActiveMQ.Advisory.TempQueue消息

Lau*_*res 6 activemq-classic

我正在调查我的经纪人网络中的内存问题.根据JConsole,当代理开始阻止消息时,ActiveMQ.Advisory.TempQueue占用了99%的已配置内存.

有关配置的一些细节

大部分默认配置.一个打开的stomp + nio连接器,一个打开的openwire连接器.所有代理都形成一个超立方体(一个与其他代理的一个路上连接(更容易自动生成)).没有流量控制.

问题详情

webconsole在30个消费者(6个代理,一个消费者,其余是使用java连接器的客户端)中显示了1974234排队和45345个出列消息.据我所知,出队数量不应小于:排队*消费者.所以在我的情况下,大量的建议没有消耗,并开始填补我的临时消息空间.(目前我配置了几个gb作为临时空间)

由于没有客户主动使用临时队列,我发现这很奇怪.看了一下临时队列后我更加困惑了.大多数消息看起来像这样(msg.toString):

ActiveMQMessage {commandId = 0, responseRequired = false, messageId = ID:srv007210-36808-1318839718378-1:1:0:0:203650, originalDestination = null, originalTransactionId = null, producerId = ID:srv007210-36808-1318839718378-1:1:0:0, destination = topic://ActiveMQ.Advisory.TempQueue, transactionId = null, expiration = 0, timestamp = 0, arrival = 0, brokerInTime = 1318840153501, brokerOutTime = 1318840153501, correlationId = null, replyTo = null, persistent = false, type = Advisory, priority = 0, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = org.apache.activemq.util.ByteSequence@45290155, dataStructure = DestinationInfo {commandId = 0, responseRequired = false, connectionId = ID:srv007210-36808-1318839718378-2:2, destination = temp-queue://ID:srv007211-47019-1318835590753-11:9:1, operationType = 1, timeout = 0, brokerPath = null}, redeliveryCounter = 0, size = 0, properties = {originBrokerName=broker.coremq-behaviortracking-675-mq-01-master, originBrokerId=ID:srv007210-36808-1318839718378-0:1, originBrokerURL=stomp://srv007210:61612}, readOnlyProperties = true, readOnlyBody = true, droppable = false}
Run Code Online (Sandbox Code Playgroud)

看到这些消息后,我有几个问题:

  1. 我是否正确理解消息的来源是一个stomp连接?
  2. 如果是,那么stomp连接如何创建临时队列?
  3. 有没有一个简单的原因,为什么不消费的建议?

目前,我通过停用网络连接器上的bridgeTempDestinations属性来推迟问题.这样消息就不会传播,它们会更慢地填充临时空间.如果我无法修复这些消息的来源,我至少会阻止他们填充商店:

  1. 我可以在一段时间后删除这些未使用的消息吗?
  2. 这有什么后果?

更新:我更多地监视了我的集群,发现消息被消耗了.它们被排队和分派,但是消费者(其他群集节点如同使用activemq lib的java使用者一样)无法确认消息.所以他们留在调度的消息队列中,这个队列增长和增长.

Pau*_*aul -1

如果您不使用此咨询主题 - 您可能需要按照http://activemq.2283324.n4.nabble.com/How-to-disable-advisory-for-gt-topic-ActiveMQ-上的建议将其关闭咨询-TempQueue-td2356134.html

删除建议消息不会产生任何后果 - 因为这些消息只是用于系统健康分析和统计的消息。

  • 我在代理网络中工作,所以我需要它们,除非我想手动配置每个消息路由。 (2认同)