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