【问题标题】:Callback of RabbitMQ returning nothingRabbitMQ 的回调不返回任何内容
【发布时间】:2018-04-12 10:05:59
【问题描述】:

我正在使用 PHP 中的 RabbitMQ。我可以发送消息,但接收端出现问题。

这是我的发件人代码

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$consumerTag = 'consumer' . getmypid();
$channel->queue_declare('loggingQ', false, true, false, false);

$msg = new AMQPMessage("hi");
$channel->basic_publish($msg, '', 'loggingQ');

$channel->close();
$connection->close();

这是接收者的代码

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('loggingQ', false, true, false, false);

$callback = function($msg) {
    echo $msg->body;
};
$channel->basic_consume('loggingQ', '', false, true, false, false, $callback);
while(count($channel->callbacks)) {
   $channel->wait();
} 

$channel->close();
$connection->close();

现在问题出在我的接收端,它从不回显消息。它只是不断请求,就像永无止境的过程。

我如何在 callback 方法中获取我的消息。它从不打印任何东西。 任何帮助将不胜感激。

【问题讨论】:

  • 我假设您在启动 Sender 之前启动了接收器。
  • @NigelRen 不,这两个代码都放在不同的文件中。发送者文件调用接收者代码的文件。所以在任何情况下,第一个发送者文件都会执行,然后是接收者。

标签: php rabbitmq queue


【解决方案1】:

我没有大量使用 RabbitMQ 的经验,很抱歉可能是一个糟糕的解释,但我使用它的方式是遵循 https://www.rabbitmq.com/tutorials/tutorial-two-php.html 的教程。我认为通常假设您的工作人员已准备好处理发送的任何消息(这取决于队列类型)。

如果您希望消息持续存在,则需要将其称为...

$msg = new AMQPMessage("hi",
       array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT)
       );

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多