Skip to content

RabbitMQ gebruiken als een message-broker

RabbitMQ is een zeer populaire message broker die je kunt gebruiken als alternatief voor PostgreSQL.

Overschakelen van PostgreSQL naar RabbitMQ

Om RabbitMQ te gebruiken in plaats van PostgreSQL als message-broker:

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

We moeten ook RabbitMQ ondersteuning toevoegen voor Messenger:

1
$ symfony composer req amqp-messenger

RabbitMQ toevoegen aan de Docker Stack

Zoals je misschien al geraden hebt, moeten we ook RabbitMQ toevoegen aan de Docker Compose stack:

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:

Docker services herstarten

Om Docker Compose te dwingen rekening te houden met de RabbitMQ-container, stop je de containers en start je ze opnieuw:

1
2
$ docker-compose stop
$ docker-compose up -d
1
$ sleep 10

Het verkennen van de RabbitMQ web-beheerinterface

Als je wachtrijen wil zien en berichten door RabbitMQ wil zien vloeien, open dan de web-beheerinterface:

1
$ symfony open:local:rabbitmq

Of via de online debug toolbar:

/

Gebruik guest/guest om in te loggen op de RabbitMQ-beheerinterface:

/

RabbitMQ deployen

RabbitMQ toevoegen aan de productieservers kan, door deze toe te voegen aan de lijst met services:

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

Verwijs ernaar in de web container configuratie en schakel de amqp PHP-extensie in:

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: |

Wanneer de RabbitMQ-service in een project is geïnstalleerd, kan je de web beheerinterface openen door eerst de tunnel te openen:

1
2
3
4
5
$ symfony cloud:tunnel:open
$ symfony open:remote:rabbitmq

# when done
$ symfony cloud:tunnel:close
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.
TOC
    Version