Uso il server rabbitMQ con amq.Connessione in server RabbitMQ persa automaticamente dopo 600 s
Ho un problema difficile. Dopo aver lasciato il server da solo per circa 10 minuti, la connessione viene persa.
Cosa potrebbe causare questo?
Uso il server rabbitMQ con amq.Connessione in server RabbitMQ persa automaticamente dopo 600 s
Ho un problema difficile. Dopo aver lasciato il server da solo per circa 10 minuti, la connessione viene persa.
Cosa potrebbe causare questo?
Se si guarda alla documentazione del cliente Erlang http://www.rabbitmq.com/erlang-client-user-guide.html si vedrà una sezione intitolata Collegamento a un broker
Questo ti dà alcune opzioni differenti che è possibile specificare quando la configurazione della connessione al server RabbitMQ, una delle opzioni è heartbeat
, come è possibile vedere l'impostazione predefinita è 0
quindi non viene specificato heartbeat.
Non so esattamente notazione di Erlang, ma è necessario fare qualcosa di simile:
{ok, Connection} = amqp_connection:start(#amqp_params_network{heartbeat = 5})
Il timeout battito cardiaco è specificato in secondi. In questo modo, il tuo interlocutore tornerà al server ogni 5 secondi.
prendere anche uno sguardo a questa discussione: https://groups.google.com/forum/?fromgroups=#!topic/rabbitmq-discuss/u227xzvqOr8
Il timeout di connessione predefinito per la produzione di connessioni RabbitMQ è 600 secondi (almeno nel client Java API), di conseguenza, i 10 minuti. È possibile modificare ciò specificando al factory di connessione il timeout prescelto.
È buona norma assicurarsi che la connessione venga rilasciata e ricreata dopo un determinato periodo di tempo, per prevenire eventuali perdite e risorse eccessive. Il codice dovrebbe garantire di cercare una connessione valida che non è prossima a scadere e ristabilire una nuova connessione su quelli che hanno interrotto il timeout. Nel complesso, adottare un approccio di pool-connessione.
- Java Esempio:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(this.serverName);
factory.setPort(this.serverPort);
factory.setUsername(this.userName);
factory.setPassword(this.userPassword);
factory.setConnectionTimeout(YOUR-TIMEOUT-IN-SECONDS);
Connection = factory.newConnection();
False. Ci sono due timeout: uno memorizzato sul lato server e uno che viene passato a 'Socket.new'. L'ultimo valore predefinito è 0 == infinito ed è controllato da 'factory.setConnectionTimeout'. – djechlin
avete provato ad impostare un valore battito cardiaco durante la creazione del collegamento? – kzhen
@kzhen: come si imposta un valore heartbeat? – Hyeongsik
quale client stai usando? – kzhen