tbcd/multi-dynamic-messenger

2.0.0 2023-10-31 21:51 UTC

This package is auto-updated.

Last update: 2024-09-30 02:05:37 UTC


README

此包是 symfony/messenger 组件的扩展,提供了一种在运行时修改传输而无需重启消费者的传输方式

安装

composer require tbcd/multi-dynamic-messenger

使用

首先,您需要实现一个提供传输数据的服务的接口,这个服务需要实现 TransportDataProviderInterface 接口

在下面的示例中,我们提供存储在数据库实体中的传输数据

# src\Messenger\EntityTransportDataProvider.php

class EntityTransportDataProvider implements TransportDataProviderInterface
{

    public function getAll(): array
    {
        $entities = $this->em->getRepository(TransportEntity::class)->findAll();
        return array_map(function(TransportEntity $entity) {
            return new TransportData($entity->getName(), $entity->getDsn(), $entity->getOptions());
        }, $entities);
    }
}

然后,您需要配置传输工厂

  • messenger.transport_factory 标签添加到传输工厂
  • 绑定您的 TransportDataProvider
# config/services.yaml

services:

    ...

    TBCD\Messenger\MultiDynamicTransport\MultiDynamicTransportFactory:
        tags: [ messenger.transport_factory ]
        binds:
            $transportDataProvider: App\Messenger\EntityTransportDataProvider

然后,您需要创建消息传递传输

# config/packages/messenger.yaml

framework:
    messenger:
        transports:
            # https://symfony.com.cn/doc/current/messenger.html#transport-configuration
            multidynamic:
                dsn: 'multi-dynamic://'

最后,使用命令 php bin/console messenger:consume mytransportname 启动消费者