Symfony Messenger: Eine Einführung

Symfony Messenger: Eine Einführung

Eine der großen Neuerungen in Symfony 4.1 ist die Messenger-Komponente, die als experimentelles Feature zur Verfügung steht. In meinem Talk möchte ich die Komponente und ihre Funktionsweise an einem praktischen Beispiel vorstellen.

6a1345d8e6dd15b2c78eff0c331963b1?s=128

Denis Brumann

October 26, 2018
Tweet

Transcript

  1. 6.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 9 1. Invite-Code prüfen 2. Neuen

    Benutzer anlegen 3. Invite-Code einlösen 4. Neue Invites erstellen 5. Benutzer benachrichtigen Registrierung
  2. 17.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 23 <?php declare(strict_types = 1); namespace

    App\Message; class RegisterUser { public $inviteCode; public $email; public $plainPassword; }
  3. 20.
  4. 24.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 28 InvitationProvider::getOpenInvitation() CreateUser
 Handler RedeemInvitation
 Handler

    GenerateInvitations
 Handler NotifyInviteOwner
 Handler SecurityController::register() Message Bus RegisterUser UserCreator
 create() InvitationRedeemer redeem() InvitationGenerator
 generateMultiple() InvitationNotifier
 notifyInvitingUser()
  5. 26.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 30 <?php namespace Symfony\Component\Messenger\Handler; /** *

    Marker interface for message handlers. * * @author Samuel Roze <samuel.roze@gmail.com> * * @experimental in 4.1 */ interface MessageHandlerInterface { }
  6. 28.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 32 interface MessageSubscriberInterface extends MessageHandlerInterface {

    /** * yield FirstMessage::class => ['method' => ‘firstMessageMethod']; * yield SecondMessage::class => [ * 'method' => ‘secondMessageMethod', * 'priority' => 20, * ‘bus' => ‘my_bus_name', * ]; */ public static function getHandledMessages(): iterable; }
  7. 29.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 33 CreateUser
 Handler RedeemInvitation
 Handler GenerateInvitations


    Handler NotifyInviteOwner
 Handler SecurityController::register() Message Bus RegisterUser RedeemInvitation CreateInvitations NotifyInviteOwner
  8. 30.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 34 Das Verhalten des Message Bus

    befindet sich in einem sortierten Middleware-Stack Middleware
  9. 32.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 36 framework: messenger: buses: messenger.bus.default: middleware:

    - App\Middleware\MyMiddleware - App\Middleware\AnotherMiddleware # default_middleware: false Konfiguration
  10. 39.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN # config/packages/messenger.yaml framework: messenger: transports:
 amqp:

    '%env(MESSENGER_TRANSPORT_DSN)%'
 routing:
 App\Message\CreateInvitations: amqp App\Message\InvitationRedeemed: amqp 43 amqp://guest:guest@localhost:5672/%2f/messages
  11. 41.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 45 [InvalidArgumentException] No transport supports the

    given DSN
 "amqp://guest:guest@shared_queue:5672/%2f/messages". AMQP-Extension installieren composer require serializer
  12. 44.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 47 bin/console messenger:consume-messages Description: Consumes messages

    Usage: messenger:consume-messages [options] [--] <receiver> Arguments: receiver Name of the receiver Options: -l, --limit=LIMIT Limit the number of received messages -m, --memory-limit=MEMORY-LIMIT The memory limit the worker can consume -t, --time-limit=TIME-LIMIT The time limit in seconds the worker can run
  13. 50.

    Denis Brumann
 DENIS.BRUMANN@SENSIOLABS.DE
 @DBRUMANN 52 Messages enthalten nur skalare Daten


    Im Handler Entities erneut laden Ohne Transport beginnen (synchron) (dev) Messages einzeln konsumieren Good Practices