ソースを参照

~ rabbit_async_rec.pm

Yuriy Zhilovets 5 年 前
コミット
d10dac6795
1 ファイル変更13 行追加13 行削除
  1. 13 13
      lib/rabbit_async_rec.pm

+ 13 - 13
lib/rabbit_async_rec.pm

@@ -12,7 +12,7 @@ use rabbit_async;
 
 use constant SCALE => 2;
 use constant MIN_TIMEOUT => 1;
-use constant MAX_TIMEOUT => 30;
+use constant MAX_TIMEOUT => 180;
 
 sub new
 {
@@ -25,20 +25,21 @@ sub new
     arg => $arg,
     callback => $callback,
     delayed => [],
+    was_started => 0,
   };
   
   $arg->{on_close} = sub { $self->_reconnect_later };
   $arg->{on_error} = $arg->{on_connect_error} = sub { 
-    unless ($self->{timeout})
+    if ($self->{was_started})
     {
-      # если ошибка произошла при старте, это фатально
-      say STDERR "RabbitMQ connect error: ", @_;
-      exit();
+      say STDERR "RabbitMQ error: ",@_;
+      $self->_reconnect_later;
     }
     else
     {
-      say STDERR "RabbitMQ error: ",@_;
-      $self->_reconnect_later;
+      # если ошибка произошла при старте, это фатально
+      say STDERR "RabbitMQ connect error: ", @_;
+      exit();
     }
   };
   
@@ -81,6 +82,7 @@ sub _connect
   
     $self->{delayed} = [];
     $self->{timeout} = 0;
+    $self->{was_started} = 1;
     
     $self->{callback}->();
   };
@@ -92,12 +94,10 @@ sub _calc_timeout
 {
   my $self = shift;
   
-  my $timeout = MIN_TIMEOUT;
-  if ($self->{timeout})
-  {
-    $timeout = $self->{timeout} * SCALE;
-    $timeout = MAX_TIMEOUT if $timeout > MAX_TIMEOUT;
-  }
+  return MIN_TIMEOUT if $self->{timeout} == 0;
+  
+  my $timeout = $self->{timeout} * SCALE;
+  $timeout = MAX_TIMEOUT if $timeout > MAX_TIMEOUT;
 
   return $timeout;  
 }