Пока цикл не прерывается, получая ошибку - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь повторить публикацию сообщения rabbitmq, если ответ от rabbitmq равен nack. Если ответ 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 голосов
/ 30 апреля 2018

на самом деле не эксперт по rabbitmq, но, насколько я могу судить, set_nack_handler ожидает (n анонимную) функцию. сейчас ... я не знаю, каким будет идеальный способ справиться с этим, но следовать вашей попытке (предупреждение, возможно, это совершенно неправильно, но, тем не менее, это может сработать) :

$this->channel->set_nack_handler(function ($message) use ($i) {
    log("Message Nacked with content, start retrying ");
    $i = 100;
});

также Я ожидал бы, что обработчики должны быть установлены до того, как один из них ожидает, как здесь: пример из php-amqplib

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...