Code SOH
SOH utilizza al suo interno le code Symfony e il Supervisor per gestire gli eventi asincroni con un'esecuzione lenta. E' configurato uno worker ad hoc per gestire solo i processi SOH ed evitare quindi rallentamenti dovuti ai processi standard di maintenance.
I nomi delle code gestite sono:
soh_coresoh_syncsoh_oms
Esempio
Messaggio
Esempio di messaggio per trasportare le informazioni necessarie e che sarà inserito in coda.
namespace App;
class TestMessage
{
public function __construct(protected int $id)
{
}
public function getId(): int
{
return $this->id;
}
}
Handler
Esempio di handler per l'elaborazione del messaggio.
namespace App;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
#[AsMessageHandler]
class TestHandler
{
public function __construct(protected YourService $yourService)
{
}
public function __invoke(TestMessage $message): void
{
// Do the logic here
}
}
Dispatch
Una volta definito handler e messaggio è possibile fare il dispatch tramite il servizio Symfony di MessageBus.
namespace App;
use Symfony\Component\Messenger\MessageBusInterface;
class YourAsyncService
{
public function __construct(protected MessageBusInterface $messageBus)
{
}
public function yourMethod(): void
{
$this->messageBus->dispatch(new TestMessage(1234));
}
}
Registrazione
L'associazione del messaggio all'handler è effettuata all'interno del file YAML config/packages/messenger.yaml
nel seguente modo:
framework:
messenger:
routing:
App\TestMessage: soh_core