2013-03-01 8 views

Odpowiedz

2

Jeśli spojrzeć na dokumentacji klienta Erlang http://www.rabbitmq.com/erlang-client-user-guide.html widać sekcję Podłączanie do Brokera

To daje kilka różnych opcji, które można określić podczas konfigurowania połączenia z serwerem RabbitMQ, jedną z opcji jest heartbeat, jak widać domyślna wartość to 0, więc nie określono tętna.

Nie wiem dokładnie notację Erlang, ale trzeba będzie zrobić coś takiego:

{ok, Connection} = amqp_connection:start(#amqp_params_network{heartbeat = 5}) 

Timeout tętno jest określony w sekundach. Więc to spowodowałoby, że użytkownik będzie pulsować z powrotem do serwera co 5 sekund.

wziąć także spojrzeć na tej dyskusji: https://groups.google.com/forum/?fromgroups=#!topic/rabbitmq-discuss/u227xzvqOr8

3

Domyślny limit czasu połączenia dla fabryki połączeń RabbitMQ jest 600 sekund (przynajmniej w kliencie Java API), stąd twoje 10 minut. Możesz to zmienić, podając do fabryki połączeń swój czas oczekiwania.

Dobrze jest upewnić się, że połączenie jest uwalniane i odtwarzane po określonym czasie, aby zapobiec ewentualnym wyciekom i nadmiernym zasobom. Twój kod powinien zapewnić, że szuka poprawnego połączenia, które nie jest bliskie przekroczenia limitu czasu, i ponownie ustanowić nowe połączenie z tymi, z którymi upłynął czas. Ogólnie rzecz biorąc, przyjmij podejście oparte na połączeniu. Przykładem Java -

:

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(); 
+4

Fałsz. Istnieją dwa limity czasu - jeden zapisany serwer i jeden, który jest właśnie przekazywany do 'Socket.new'. Ten ostatni domyślnie przyjmuje wartość 0 == nieskończony i jest kontrolowany przez 'factory.setConnectionTimeout'. – djechlin

Powiązane problemy