2014-09-22 4 views
14

RabbitMQ consente di "heartbeat" una connessione, ovvero di volta in volta il client e il server controllano (utilizzando i messaggi vuoti) che l'altra parte è ancora disponibile e disponibile. Fin qui tutto bene.Qual è un valore ragionevole per l'heartbeat in RabbitMQ?

Sfortunatamente, non sono stato in grado di trovare un posto nella documentazione in cui viene fatto un suggerimento quale sia un ragionevole valore per questo. So che è necessario specificare il battito cardiaco in secondi, ma qual è il valore di best practice del mondo reale?

Ovviamente, non dovrebbe essere troppo spesso (traffico), ma anche non troppo raro (proxy, ...). Eventuali suggerimenti?

15 secondi vanno bene? 30? 60? ...?

risposta

2

La documentazione RabbitMQ fornisce ora un valore di timeout battito cardiaco consigliata tra 5 e 20 secondi:

Impostazione valore di timeout battito cardiaco troppo basso può portare a falsi positivi (peer viene considerato non disponibile, mentre in realtà non è il caso) a causa della congestione della rete transitoria, del controllo del flusso del server di breve durata e così via. Questo dovrebbe essere preso in considerazione quando si seleziona un valore di timeout.

Diversi anni vale la pena di feedback da parte degli utenti e manutentori della libreria client suggeriscono che valori inferiori a 5 secondi sono abbastanza probabilità di causare falsi positivi, e valori di 1 secondo o inferiore sono molto propensi a farlo. I valori compresi nell'intervallo da 5 a 20 secondi sono ottimali per la maggior parte degli ambienti.

Fonte

: https://www.rabbitmq.com/heartbeats.html#false-positives

Inoltre, come di RabbitMQ 3.5.5 il valore di timeout heartbeat predefinito è 60 secondi (https://www.rabbitmq.com/heartbeats.html#heartbeats-timeout)

11

Questa risposta se per RabbitMQ < 3.5.5, per le versioni più recenti vedere la risposta da @bmaupin.

Dipende dalle esigenze dell'applicazione. Fuori dalla scatola è di 10 minuti per RabbitMQ. Se non si riesce ad eseguire l'heartbeat due volte (20 minuti di inattività), la connessione verrà chiusa immediatamente senza inviare alcun metodo connection.close o alcun errore dal lato del broker.

Il caso per utilizzare l'heartbeat è firewall che si chiude inattivo per una connessione di lunga durata o alcune altre impostazioni di rete che non consentono di avere connessioni in attesa.

Infatti, hearbeat non è un obbligo, da RabbitMQ config doc

battito

valore che rappresenta il ritardo battito cardiaco, in secondi, che il server invia nel telaio connection.tune. Se impostato su 0, gli heartbeat sono disabilitati. I clienti potrebbero non seguire il suggerimento del server, vedere il riferimento AMQP per ulteriori dettagli. La disattivazione degli heartbeat potrebbe migliorare le prestazioni in situazioni con un numero elevato di connessioni, ma potrebbe portare a interruzioni delle connessioni in presenza di dispositivi di rete che chiudono le connessioni inattive. Impostazione predefinita: 580

Nota: l'intervallo di frequenza troppo breve può causare un sovraccarico significativo della rete. Tenere presente che i frame hearbeat vengono inviati quando non vi sono altre attività sulla connessione per un intervallo di tempo di ascolto.

+0

Va bene impostare l'heartbeat su 1 ora? Come faccio a riprendere il battito cardiaco dal lato client? – moeseth