Używanie RabbitMQ jako pośrednika wiadomości
RabbitMQ jest bardzo popularnym pośrednikiem wiadomości (ang. message broker), który możesz wykorzystać jako alternatywę dla PostgreSQL.
Zmiana PostgreSQL na RabbitMQ
Wprowadź następujące zmiany, aby użyć RabbitMQ zamiast PostgreSQL jako pośrednika wiadomości:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
--- a/config/packages/messenger.yaml
+++ b/config/packages/messenger.yaml
@@ -5,10 +5,7 @@ framework:
transports:
# https://symfony.com/doc/current/messenger.html#transport-configuration
async:
- dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
- options:
- use_notify: true
- check_delayed_interval: 60000
+ dsn: '%env(RABBITMQ_URL)%'
retry_strategy:
max_retries: 3
multiplier: 2
Musimy również dodać obsługę RabbitMQ dla Messengera:
1
$ symfony composer req amqp-messenger
Dodawanie RabbitMQ do stosu Dockera
Jak pewnie się domyślasz, musimy dodać RabbitMQ do stosu Docker Compose:
1 2 3 4 5 6 7 8 9 10 11 12 13
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -19,6 +19,10 @@ services:
image: redis:5-alpine
ports: [6379]
+ rabbitmq:
+ image: rabbitmq:3.7-management
+ ports: [5672, 15672]
+
volumes:
###> doctrine/doctrine-bundle ###
db-data:
Restartowanie usług Dockera
Aby Docker Compose zauważył RabbitMQ, musisz zatrzymać kontenery i je zrestartować:
1 2
$ docker-compose stop
$ docker-compose up -d
Odkrywanie webowego interfejsu do zarządzania RabbitMQ
Jeżeli chcesz zobaczyć kolejki i wiadomości przepływające przez RabbitMQ, otwórz webowy interfejs zarządzania:
1
$ symfony open:local:rabbitmq
lub wykorzystaj pasek narzędzi do debugowania:
Użyj kombinacji guest
/guest
aby zalogować się do webowego interfejsu zarządzania RabbitMQ.
Wdrażanie RabbitMQ
Aby dodać RabbitMQ do serwerów produkcyjnych, dodaj go do listy usług:
1 2 3 4 5 6 7 8 9 10 11
--- a/.platform/services.yaml
+++ b/.platform/services.yaml
@@ -18,3 +18,8 @@ files:
rediscache:
type: redis:5.0
+
+queue:
+ type: rabbitmq:3.7
+ disk: 1024
+ size: S
Dodaj odniesienie do RabbitMQ w konfiguracji kontenera oraz włącz rozszerzenie PHP o nazwie amqp
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
--- a/.platform.app.yaml
+++ b/.platform.app.yaml
@@ -8,6 +8,7 @@ dependencies:
runtime:
extensions:
+ - amqp
- apcu
- blackfire
- ctype
@@ -41,6 +42,7 @@ mounts:
relationships:
database: "database:postgresql"
redis: "rediscache:redis"
+ rabbitmq: "queue:rabbitmq"
hooks:
build: |
Aby dostać się do webowego interfejsu zarządzania RabbitMQ, po tym kiedy zostanie on zainstalowany w Twoim projekcie, musisz najpierw otworzyć tunel:
1 2 3 4 5
$ symfony cloud:tunnel:open
$ symfony open:remote:rabbitmq
# when done
$ symfony cloud:tunnel:close