Attualmente sto esaminando un problema di memoria nella mia rete di broker. In base a JConsole, ActiveMQ.Advisory.TempQueue occupa il 99% della memoria configurata quando il broker inizia a bloccare i messaggi.Rete broker inondata di messaggi ActiveMQ.Advisory.TempQueue non consumati
Alcuni dettagli circa la configurazione
configurazione di default per la maggior parte. Un connettore aperto stomp + nio, un connettore openwire aperto. Tutti i broker formano un ipercubo (una connessione a ogni altro broker (più facile da generare automaticamente)). Nessun controllo del flusso. Dettagli
Problema
La webconsole mostra qualcosa come 1.974.234 accodato e 45345 rimosse dalla coda dei messaggi a 30 consumatori (6 broker, un consumatore e il resto è client che utilizzano il connettore Java). Per quanto ne so, il conteggio delle dequeue non dovrebbe essere molto più piccolo di: accodato * i consumatori. quindi nel mio caso non viene consumato un gran numero di avvisi e inizia a riempire il mio spazio di messaggi temporanei. (attualmente ho configurato diversi GB come spazio temporaneo)
Poiché nessun client utilizza attivamente le code temporanee, lo trovo molto strano. Dopo aver dato un'occhiata alla coda dei temp sono ancora più confuso. La maggior parte dei messaggi simile a questa (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 = [email protected], 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}
Dopo aver visto questi messaggi Ho molte domande:
- Ho capito bene che l'origine del messaggio è uno Stomp connessione?
- In caso affermativo, in che modo una connessione Stomp può creare code temporanee?
- C'è un motivo semplice per cui gli avvisi non vengono consumati?
Attualmente ho risolto il problema disattivando la proprietà bridgeTempDestinations sui connettori di rete. in questo modo i messaggi non vengono diffusi e riempiono lo spazio temp molto più lentamente. Se non riesco a correggere l'origine di questi messaggi vorrei almeno impedirgli di riempire il negozio:
- Posso eliminare questi messaggi non consumati dopo un certo tempo?
- quali conseguenze può avere?
AGGIORNAMENTO: Ho monitorato il mio cluster ancora e ho scoperto che i messaggi sono stati consumati. Vengono accodati e inviati ma i consumatori (gli altri nodi del cluster come mutanti come utenti java che utilizzano la lib activemq) non riescono a riconoscere i messaggi. quindi rimangono nella coda dei messaggi inviati e questa coda cresce e cresce.
trovi effettivamente code con messaggi di avviso in loro? O sono argomenti? Se sono code - hai un consumatore specifico per quelli? – Paul
sono argomenti ma i nodi delle reti broker e l'adattatore risorse java sono in attesa sulla destinazione TempQueue per impostazione predefinita. – Laures
Hey @Laures, ho un problema simile. 1. Come sei riuscito a monitorare quella situazione? 2. Come lo hai risolto alla fine? –