This Symfony Bundle allow collecting dispatched message using Symfony Messenger.
composer require tienvx/pact-messenger-bundle
namespace App\MessageDispatcher;
use App\Message\UserCreated;
use Tienvx\Bundle\PactMessengerBundle\Service\EnvelopeCollectorInterface;
use Tienvx\Bundle\PactProviderBundle\Attribute\AsMessageDispatcher;
use Tienvx\Bundle\PactProviderBundle\Model\Message;
use Tienvx\Bundle\PactProviderBundle\MessageDispatcher\DispatcherInterface;
#[AsMessageDispatcher(description: 'User created message')]
class UserDispatcher implements DispatcherInterface
{
public function __construct(private EnvelopeCollectorInterface $collector)
{
}
public function dispatch(): ?Message
{
$envelope = $this->collector->getSingle(UserCreated::class);
if (!$envelope) {
return null;
}
$message = $envelope->getMessage();
if (!$message instanceof UserCreated) {
return null;
}
return new Message(
\json_encode([
'class' => UserCreated::class,
'id' => $message->userId,
]),
'application/json',
json_encode(['contentType' => 'application/json'])
);
}
}