Мой develompent: Docker + Centos 7 + PHP73, NGINX.
Решение для этой конфигурации:
1. Установите php-rdkafka (важно: версия 3.1.x !, измените путь на php;))
yum -y install make librdkafka-devel && git clone --branch 3.1.x https://github.com/arnaud-lb/php-rdkafka.git && cd php-rdkafka && /path/to/php73/root/bin/phpize && ./configure --with-php-config=/path/to/php73/root/bin/php-config && make all -j 5 && make install
2. Добавьте расширение php в php.ini
[rdkafka]
extension=rdkafka.so
3. Установить пакет для Symfony:
composer req symfony/messenger enqueue/rdkafka enqueue/enqueue-bundle sroze/messenger-enqueue-transport
4. Регистрация пакетов - добавьте в config / bundles.php
Enqueue\Bundle\EnqueueBundle::class => ['all' => true],
Enqueue\MessengerAdapter\Bundle\EnqueueAdapterBundle::class => ['all' => true],
5. Добавить файл config / packages / enqueue.yaml:
enqueue:
default:
transport:
dsn: "rdkafka://"
global:
group.id: 'myapp'
metadata.broker.list: "%env(KAFKA_BROKER_LIST)%"
topic:
auto.offset.reset: beginning
commit_async: true
client: ~
6. Добавить файл config / packages / messenger.yaml:
framework:
messenger:
failure_transport: failed
transports:
async:
dsn: "%env(MESSENGER_TRANSPORT_DSN)%"
failed:
dsn: "doctrine://default?queue_name=failed"
routing:
'App\Message\EmailNotification': asyn
7. добавить в .env:
###> messenger ###
MESSENGER_TRANSPORT_DSN=enqueue://default
KAFKA_BROKER_LIST=node-1.kafka.host:9092,node-2.kafka.host:9092,node-3.kafka.host:9092
###< messenger ###
8. Messege и MessengeHandle из документации: https://symfony.com/doc/current/messenger.html
9. Запустите потребителя:
php bin/console messenger:consume async
Удачи!