2011-09-28 28 views
2

的RabbitMQ是設置,我可以使用示例腳本:爲什麼我會在Perl的RabbitMQ使用者中遇到404錯誤?

use Net::RabbitMQ; 
my $mq = Net::RabbitMQ->new(); 
$mq->connect("localhost", { user => "guest", password => "guest" }); 
$mq->channel_open(1); 
$mq->publish(1, "queuename", "Hi there!"); 
$mq->disconnect(); 

它張貼消息(我認爲)。我嘗試了消息的一個簡單的抓下從隊列中,我得到一個404:

my $mq = Net::RabbitMQ->new(); 
$mq->connect("localhost", { user => "guest", password => "guest" }); 
$mq->channel_open(1); 
print $mq->get(1, "queuename"); 

回答

3

錯誤消息的全文是:

basic_get: server channel error 404, message: NOT_FOUND - no queue 'queuename' in vhost '/' ... 

您需要創建隊列與auto_delete => 0 - 否則它會在第一個進程終止時消失。看看queue_declare方法。

0

我看着queue_declare並將其添加到監聽器和改變了一些代碼如下:

#!/usr/bin/perl 

use strict; 
use Data::Dumper; 
use Net::RabbitMQ; 
my $channel = 1; 
my $queue = "MyQueue.q"; 
my $exchange = "MyExchange.x"; 
my $routing_key = "foobar"; 
my $mq = Net::RabbitMQ->new(); 
$mq->connect("localhost", { user => "guest", password => "guest" }); 
$mq->channel_open($channel); 
$mq->exchange_declare($channel, $exchange, { auto_delete => 0, }); 
$mq->queue_declare($channel, $queue, { auto_delete => 0, }); 
$mq->queue_bind($channel, $queue, $exchange, $routing_key); 

while(1){ 
    my $hashref = $mq->get($channel, $queue); 
    next if (! defined($hashref)); 
    print Dumper($hashref); 
} 

我踢聽者腳本關閉,然後,當我執行下面,消息發佈:

#!/usr/bin/perl 
my $channel = 1; 
my $queue = "MyQueue.q"; 
my $exchange = "MyExchange.x"; 
my $routing_key = "foobar"; 
use Net::RabbitMQ; 
my $mq = Net::RabbitMQ->new(); 
$mq->connect("localhost", { user => "guest", password => "guest" }); 
$mq->channel_open(1); 
$mq->publish($channel, $queue, "Message Here"); 
$mq->disconnect(); 
+0

請注意,如果您在發佈時不打算使用路由鍵,則不需要創建交換。我會建議通過[這些教程](http://www.rabbitmq.com/tutorials/tutorial-one-python.html)。即使認爲它們適用於Python,也很容易將它們轉換爲Perl。 – ErikR

相關問題