Non retry messages must be acknowledged

This commit is contained in:
2021-06-28 11:28:39 +03:00
parent 2b9e41a857
commit 1f2a80f820
2 changed files with 41 additions and 0 deletions

View File

@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
namespace Nsq\NsqBundle\Messenger;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
use function Amp\Promise\wait;
final class AckUnrecoverableMessageListener implements EventSubscriberInterface
{
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array
{
return [
WorkerMessageFailedEvent::class => ['onMessageFailed', 500],
];
}
public function onMessageFailed(WorkerMessageFailedEvent $event): void
{
if ($event->willRetry()) {
return;
}
$envelope = $event->getEnvelope();
$message = NsqReceivedStamp::getMessageFromEnvelope($envelope);
if ($message->isProcessed()) {
return;
}
wait($message->finish());
}
}

View File

@ -3,3 +3,7 @@ services:
tags: tags:
- 'messenger.transport_factory' - 'messenger.transport_factory'
- 'container.no_preload' - 'container.no_preload'
Nsq\NsqBundle\Messenger\AckUnrecoverableMessageListener:
tags:
- { name: kernel.event_subscriber }