Abbiamo 4 programmi di broker ActiveMQ (ognuno in esecuzione su un server separato) in una rete di broker. Ci sono circa 60 produttori. I produttori cercano la factory di connessione ActiveMQ di Glassfish usando JDNI.Trasporto failover ActiveMQ - Perché così tante connessioni?
L'ActiveMQ URI configurato in Glassfish è la seguente:
failover:(tcp://phxgapm01:61616,tcp://phxgapm02:61616,tcp://phxgapm03:61616,tcp://phxgapm04:61616)?randomize=true&backup=false&maxReconnectAttempts=8
Ogni processo produttore fa una ricerca JNDI del javax.jms.ConnectionFactory e quindi crea 1 javax.jms.Connection. Durante l'esecuzione del produttore, crea periodicamente javax.jms.Session e javax.jms.MessageProducer, invia alcuni messaggi a una coda e chiude la sessione e MessageProducer.
Questo è tutto sfondo - ora alla mia domanda. Da alcuni, ma non tutti i produttori, vedremo un flusso di output di registro simile al seguente:
2014-12-30 21:07:06,534 INFO FailoverTransport - Successfully connected to tcp://phxgapm03:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,538 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,544 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,548 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,552 INFO FailoverTransport - Successfully connected to tcp://phxgapm01:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,556 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,561 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,565 INFO FailoverTransport - Successfully connected to tcp://phxgapm01:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,568 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,572 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,577 INFO FailoverTransport - Successfully connected to tcp://phxgapm03:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,581 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,586 INFO FailoverTransport - Successfully connected to tcp://phxgapm01:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,590 INFO FailoverTransport - Successfully connected to tcp://phxgapm03:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,594 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
Per alcuni dei produttori che vedremo questa uscita ogni 10 minuti - per altri è meno frequente. Ancora più confuso è il fatto che tutti questi produttori utilizzano un codice identico per la messaggistica JMS - così, mentre i produttori possono variare nel modo in cui creano sessioni e programmi di gestione dei messaggi, tutti usano lo stesso codice e creano tutti solo 1 oggetto di connessione.
Dalla lettura della documentazione, la mia comprensione è che il trasporto di failover aprirebbe una connessione a 1 dei broker (selezionando casualmente nel nostro caso). Perché vediamo questo flusso di connessioni (più connessioni a ciascuno dei broker entro 60 ms)? Usando netstat possiamo vedere queste connessioni. È normale? Se no, qualche suggerimento su cosa potrebbe causare questo?
È utile il codice che utilizza gli esempi diritti JMS o JMSTemplate ecc. Esiste un PooledConnectionFactory in uso. –
JMS diretto - Non è presente alcuna PooledConnectionFactory utilizzata (almeno non direttamente) – sceaj
Se esiste una connessione XA Factory, è necessario utilizzare PooledConnectionFactory, altrimenti si disconnetterà/riconnetterà tutto il tempo. Puoi vedere il conteggio delle connessioni crescere in uno degli argomenti di gestione (non ricordi quale) – stringy05