Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当循环未中断时,获取错误_Php_Rabbitmq - Fatal编程技术网

Php 当循环未中断时,获取错误

Php 当循环未中断时,获取错误,php,rabbitmq,Php,Rabbitmq,如果来自rabbitmq的响应是nack,我将尝试重试rabbitmq消息发布。如果响应为ack表示我正在重试的消息已发布,则我希望中断循环。但我得到了这个错误。我不知道这个错误在这里意味着什么 无法中断/继续1个级别 这是我的密码 while($i <= 10) { $this->channel->queue_declare($queueName, false, true, false, false); $thi

如果来自rabbitmq的响应是
nack
,我将尝试重试rabbitmq消息发布。如果响应为
ack
表示我正在重试的消息已发布,则我希望中断循环。但我得到了这个错误。我不知道这个错误在这里意味着什么

无法中断/继续1个级别

这是我的密码

    while($i <= 10) {
              $this->channel->queue_declare($queueName, false, true, false, false);
              $this->channel->basic_publish($queueMsg, $exchange, '');

              $this->channel->wait_for_pending_acks();

              //Negative Ack
              $this->channel->set_nack_handler(
                  log("Message Nacked with content, start retrying ");
                  continue;
              );

              //Positive Ack
              $this->channel->set_ack_handler(
                 log("Message acked with content ");
                 break; /*I want to break this loop here once message published successfully*/
                  );
              $i++;
            }
while($i通道->队列\u声明($queueName,false,true,false,false);
$this->channel->basic_publish($queueMsg,$exchange');
$this->channel->wait_for_pending_acks();
//负应答
$this->channel->set\u nack\u处理器(
日志(“已收到内容的消息,开始重试”);
继续;
);
//正面应答
$this->channel->set\u ack\u处理程序(
日志(“已确认内容的消息”);
break;/*消息成功发布后,我希望在此中断此循环*/
);
$i++;
}

并非真正的rabbitmq专家,但据我所知,set_nack_处理程序需要一个(n匿名)函数。现在…我不知道处理此问题的最佳方法是什么,但请遵循您的尝试(警告,这可能是非常错误的,但可能仍然有效):


另外,我希望在等待之前设置处理程序,如下所示:

中断位置错误,继续位置也错误。您将在代码之前或之后将其传递给处理程序。谢谢!我知道了。但是,有什么方法可以处理此问题吗?有什么建议吗?一旦出现po,我想结束此while循环积极确认(在
set\u ack\u handler()
中)。这些函数是否返回任何内容?如果是,请检查是否有肯定响应,然后执行中断/继续。发布消息的方法是基本的\u publish()方法。但它不返回任何内容。看起来您并没有增加$i。
$this->channel->set_nack_handler(function ($message) use ($i) {
    log("Message Nacked with content, start retrying ");
    $i = 100;
});