Verbrauchen Sie nicht bestätigen Nachrichten von RabbitMq

Ich habe einen einfachen Verleger und einen Konsumenten erstellt, die die Warteschlange mit abonnierenbasic.consume.

Mein Verbraucher bestätigt die Meldungen, wenn der Auftrag ohne Ausnahme ausgeführt wird. Immer wenn ich auf eine Ausnahme stoße, nehme ich die Nachricht nicht an und kehre früh zurück. Nur die bestätigten Nachrichten verschwinden aus der Warteschlange, damit das korrekt funktioniert.
Jetzt möchte ich, dass der Konsument die fehlgeschlagenen Nachrichten wieder aufnimmt, aber die einzige Möglichkeit, diese Nachrichten wieder aufzunehmen, besteht darin, den Konsumenten neu zu starten.

Wie muss ich mich diesem Anwendungsfall nähern?

Setup-Code

$channel = new AMQPChannel($connection);

$exchange = new AMQPExchange($channel);

$exchange->setName('my-exchange');
$exchange->setType('fanout');
$exchange->declare();

$queue = new AMQPQueue($channel);
$queue->setName('my-queue');
$queue->declare();
$queue->bind('my-exchange');

Verbrauchercode

$queue->consume(array($this, 'callback'));

public function callback(AMQPEnvelope $msg)
{
    try {
        //Do some business logic
    } catch (Exception $ex) {
        //Log exception
        return;
    }
    return $queue->ack($msg->getDeliveryTag());
}

Herstellercode

$exchange->publish('message');

Antworten auf die Frage(2)

Ihre Antwort auf die Frage