src/HealthCheck/MessengerTransportHealthCheck.php line 28

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\HealthCheck;
  4. use App\Message\HealthCheckMessage\IbexaHealthCheckMessage;
  5. use Symfony\Component\Messenger\MessageBusInterface;
  6. use Symfony\Component\Messenger\Stamp\SentStamp;
  7. use SymfonyHealthCheckBundle\Check\CheckInterface;
  8. use SymfonyHealthCheckBundle\Dto\Response;
  9. class MessengerTransportHealthCheck implements CheckInterface
  10. {
  11. public function __construct(private readonly MessageBusInterface $messageBus)
  12. {
  13. }
  14. protected static function buildHealthCheckMessage(): IbexaHealthCheckMessage
  15. {
  16. return new IbexaHealthCheckMessage();
  17. }
  18. public function check(): Response
  19. {
  20. $healthCheckMessage = static::buildHealthCheckMessage();
  21. try {
  22. $healthCheckEnvelope = $this->messageBus->dispatch($healthCheckMessage);
  23. $sentStamp = $healthCheckEnvelope->last(SentStamp::class);
  24. if ($sentStamp?->getSenderAlias() !== $healthCheckMessage->getMessengerTransport()) {
  25. throw new \RuntimeException('Health Check message was not sent correctly!');
  26. }
  27. return new Response('messenger_transport_'.$healthCheckMessage->getMessengerTransport(), $sentStamp?->getSenderAlias() === $healthCheckMessage->getMessengerTransport(), 'up');
  28. } catch (\Throwable $throwable) {
  29. return new Response('messenger_transport_'.$healthCheckMessage->getMessengerTransport(), false, $throwable->getMessage());
  30. }
  31. }
  32. }