Почему я получаю ошибку 404 с потребителем Perl RabbitMQ? - PullRequest
2 голосов
/ 28 сентября 2011

RabbitMQ настроен, и я могу использовать пример сценария:

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");

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

Полный текст сообщения об ошибке:

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

Вам необходимо создать очередь с auto_delete => 0 - иначе она исчезнет, ​​когда завершится первый процесс. Взгляните на метод queue_declare.

0 голосов
/ 29 сентября 2011

Я посмотрел на 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...