为什么 Perl 的 RabbitMQ 使用者会收到 404 错误?

发布于 2024-12-07 04:11:48 字数 528 浏览 3 评论 0原文

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

RabbitMQ is setup and I can use the sample script:

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

It posts messages (I assume). I tried the following for a simple grab of a message off of the queue and I get a 404:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

单挑你×的.吻 2024-12-14 04:11:48

错误消息全文为:

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

You need to create the queue with auto_delete =>; 0 - 否则当第一个进程终止时它将消失。看一下 queue_declare 方法。

The full text of the error message is:

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

You need to create the queue with auto_delete => 0 - otherwise it will go away when the first process terminates. Have a look at the queue_declare method.

美胚控场 2024-12-14 04:11:48

我查看了 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();

I looked at queue_declare and added it to the listener and changed some code as follows:

#!/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);
}

I kick the listener script off, then, when I execute the following, it posts messages:

#!/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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文