虽然循环不会破坏错误

时间:2018-04-30 12:45:00

标签: php rabbitmq

如果来自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++;
            }

1 个答案:

答案 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