如果来自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++;
}
答案 0 :(得分:0)
不是真正的rabbitmq专家,但据我所知,set_nack_handler需要一个(n匿名)函数。现在......我不知道处理这个问题的完美方法是什么,但是要按照你的尝试(警告,这可能是非常错误的,但它可能会起作用):< / p>
$this->channel->set_nack_handler(function ($message) use ($i) {
log("Message Nacked with content, start retrying ");
$i = 100;
});
我希望处理程序在等待之前需要设置:example from php-amqplib