-
Notifications
You must be signed in to change notification settings - Fork 18
Closed
Description
It would be nice to have a Symfony Messenger plugin
it does not dispatch events so it needs to be a middleware instead of an event subscriber, I don't know exactly how it should be added to the messenger buses middlewares from the bundle, here is how it looks in my config:
framework:
messenger:
buses:
messenger.bus.default:
middleware:
- App\Messenger\ResourceCleanerMiddleware
transports:
amqp: '%env(MESSENGER_TRANSPORT_DSN)%'
routing:
'*': amqp
and the middleware :
<?php declare(strict_types=1);
namespace App\Messenger;
use LongRunning\Core\DelegatingCleaner;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
use Symfony\Component\Messenger\Middleware\StackInterface;
class ResourceCleanerMiddleware implements MiddlewareInterface
{
/** @var DelegatingCleaner */
private $cleaner;
public function __construct(DelegatingCleaner $cleaner)
{
$this->cleaner = $cleaner;
}
public function handle(Envelope $envelope, StackInterface $stack): Envelope
{
try {
$this->cleaner->cleanup();
$envelope = $stack->next()->handle($envelope, $stack);
$this->cleaner->cleanup();
return $envelope;
} catch (\Throwable $e) {
$this->cleaner->cleanup();
throw $e;
}
}
}
Metadata
Metadata
Assignees
Labels
No labels