Net :: RabbitMQ的示例不起作用

时间:2014-11-14 12:59:53

标签: perl rabbitmq anyevent

我正在尝试学习RabbitMQ我正在开发的项目。我的研究显示了两个使用的库,Net :: RabbitMQ和AnyEvent :: RabbitMQ。 AnyEvent :: RabbitMQ对于我的需求来说似乎过于巴洛克式但是Net :: RabbitMQ似乎不能像示例所示那样工作。 下面是我发现的一些示例代码,它与我在POD中看到的匹配,但它不起作用。

#!/usr/bin/env perl
use strict;
use warnings;

use Net::RabbitMQ;

{

    # closure to return a new channel ID every time we call nextchan
    my $nextchan = 1;
    sub nextchan { return $nextchan++ }
}

### BEGIN CONFIGURABLE PARAMETERS ######################################
my $qserver = q{xx.xx.xx.xx};
my %qparms  = ();

my $qname   = q{gravity.checks};
my $message = q{Test injection};
### NO CONFIGURABLE PARAMETERS BELOW THIS LINE #########################

my $mq     = Net::RabbitMQ->new();
my $chanID = nextchan();
$message .= " " . scalar(localtime);

print STDERR qq{Will try to send message "$message" through channel $chanID};

$mq->connect( $qserver, %qparms );

出错:

  $. / send . pl
  Will try to send message "Test injection Fri Nov 14 06:50:44 2014" through channel 1 Usage : Net::RabbitMQ::connect( conn, hostname, options ) at . /send.pl line 28.

2 个答案:

答案 0 :(得分:0)

它不会出错。它打印到STDERR而不检查是否发生错误。它说我会尝试,然后它会:

$mq->connect( $qserver, %qparms );

这只是一个信息,而不是错误。

答案 1 :(得分:0)

问题是%qparams需要通过引用而不是直接传递。变更线28为:

$mq->connect($qserver, \%qparms) ;

解决了我的问题。