我想以适当的方式断开与 RabbitMQ 的连接。通过查看Perl 的AnyEvent::RabbitMQ(我正在使用)的源代码,我发现似乎关闭所有打开到 RabbitMQ 的通道的方法。close
所以我
- 连接到 RabbitMQ
- 开通了渠道
- 宣布交换
- 绑定到那个交易所
- 声明了一个队列
- 绑定到那个队列
- 在实例(不是实例)上执行
close
方法AnyEvent::RabbitMQ
::Channel
连接似乎已关闭,但 RabbitMQ 日志显示“AMQP 连接”为“connection_closed_abruptly”。
这是该连接的完整 RabbitMQ 日志:
=INFO REPORT==== 14-Jan-2016::10:02:15 ===
accepting AMQP connection <0.10868.0> (127.0.0.1:57764 -> 127.0.0.1:5672)
=WARNING REPORT==== 14-Jan-2016::10:02:16 ===
closing AMQP connection <0.10868.0> (127.0.0.1:57764 -> 127.0.0.1:5672):
connection_closed_abruptly
这是示例代码:
#!/usr/bin/perl
use strictures 1;
use AnyEvent::RabbitMQ;
use Data::Printer;
my ( $rabbitmq, $rabbitmq_channel );
my $condvar = AnyEvent->condvar;
$rabbitmq = AnyEvent::RabbitMQ->new->load_xml_spec()->connect(
host => '127.0.0.1',
port => 5672,
user => 'guest',
pass => 'guest',
vhost => '/',
timeout => 1,
tls => 0,
tune => { heartbeat => 1 },
on_success => sub {
($rabbitmq) = @_;
$rabbitmq->open_channel(
on_success => sub {
($rabbitmq_channel) = @_;
$rabbitmq_channel->confirm;
$rabbitmq_channel->declare_exchange(
exchange => 'test_exchange',
type => 'fanout',
on_success => sub {
$rabbitmq_channel->bind_exchange(
source => 'test_exchange',
destination => 'test_exchange',
routing_key => '',
on_success => sub {
$rabbitmq_channel->declare_queue(
queue => 'test_queue',
on_success => sub {
$rabbitmq_channel->bind_queue(
queue => 'test_queue',
exchange => 'test_exchange',
routing_key => '',
on_success => sub {
$rabbitmq->close;
undef $rabbitmq;
},
on_failure => sub { $condvar->send( __LINE__, @_ ) },
);
},
on_failure => sub { $condvar->send( __LINE__, @_ ) },
);
},
on_failure => sub { $condvar->send( __LINE__, @_ ) },
);
},
on_failure => sub { $condvar->send( __LINE__, @_ ) },
);
},
on_failure => sub { $condvar->send( __LINE__, @_ ) },
on_return => sub { $condvar->send( __LINE__, @_ ) },
on_close => sub { $condvar->send( __LINE__, @_ ) },
);
},
on_failure => sub { $condvar->send( __LINE__, @_ ) },
on_read_failure => sub { $condvar->send( __LINE__, @_ ) },
on_return => sub { $condvar->send( __LINE__, @_ ) },
on_close => sub { $condvar->send( __LINE__, @_ ) },
);
my $reason = [ $condvar->recv ];
p $reason;
如何使用 Perl 正确断开与 RabbitMQ 的连接AnyEvent::RabbitMQ
?