Symfony Messenger с Apache Kafka в качестве транспорта очереди - PullRequest
2 голосов
/ 10 октября 2019

Я не знаю, как настроить Kafka для Symfony messenger. Все работает для rabbitmq (я создал мессенджер и обработчик мессенджера):

. env:

MESSENGER_TRANSPORT_DSN=amqp://user:password@myhost:5672/%2f/messages

config / packages / messenger.yaml

framework:
  messenger:
    transports:
      async: "%env(MESSENGER_TRANSPORT_DSN)%"

.env

MESSENGER_TRANSPORT_DSN=enqueue://node-1.kafka.myhost.com:9092/%2f/messages

config / packages / messenger.yaml

framework:
  messenger:
    transports:
      async: "%env(MESSENGER_TRANSPORT_DSN)%"

Пожалуйста, дайте мне лучший пример. Спасибо!

1 Ответ

2 голосов
/ 10 октября 2019

Мой 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

Удачи!

...