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