RabbitMQ中$ channel-> wait()的含义是什么?

时间:2017-01-20 12:07:33

标签: php codeigniter consumer php-amqplib

我是RabbitMQ的新手。我正在使用带有codeigniter的php-amqplib库,并且仍然想知道我缺少的一些知识。

  • 为何使用document.getElementById("div").addEventListener("textInput", function () { alert("contenteditable fires input"); });
  • 为什么它总是驻留在无尽的循环中?
  • 如何/我可以绕过无限循环。

喜欢在我的项目的一个用户想要向100k潜在客户广播新广告系列的情况下,如果第二个用户有100个邮件要发送,则第二个用户受到影响,第二个用户必须等待100k邮件先发送然后最后一位用户轮到他了。

我需要一个针对并发消费者的解决方案,他们可以顺利运行而不会影响其他

这是我的代码段:

$channel->wait()

如果有人指导我完成整个过程,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

当您致电$channel->wait()时:

  • 检查频道的队列,看是否有待处理的消息。

  • 对于每条消息,您将为相应频道的回调呼叫已注册的回叫

来自" hello world示例",一步一步:

// First, you define `$callback` as a function receiving
// one parameter (the _message_).
$callback = function($msg) {
  echo " [x] Received ", $msg->body, "\n";
};

// Then, you assign `$callback` the the "hello" queue.
$channel->basic_consume('hello', '', false, true, false, false, $callback);

// Finally: While I have any callbacks defined for the channel, 
while(count($channel->callbacks)) {
    // inspect the queue and call the corresponding callbacks
    //passing the message as a parameter
    $channel->wait();
}
// This is an infinite loop: if there are any callbacks,
// it'll run forever unless you interrupt script's execution.

让您的第二个用户发送使用不同的队列。你可以拥有任意数量的队列。

答案 1 :(得分:-2)

它是模拟的

channel.start_consuming()

在python(鼠兔库)中