retailcrm/symfony-beanstalkd-messenger

Symfony Beanstalkd Messenger 桥接器

v2.0.0 2023-10-03 13:34 UTC

This package is auto-updated.

Last update: 2024-09-03 15:36:14 UTC


README

Build Status Coverage Latest stable PHP from Packagist

Symfony beanstalkd messenger

Beanstalkd 传输用于 symfony messenger

安装

composer require retailcrm/symfony-beanstalkd-messenger

使用

  • .env 配置文件中添加连接凭据

MESSENGER_TRANSPORT_DSN=beanstalkd://localhost:11300

  • 创建您的消息和消息处理器 (关于消息)

  • config/packages/messenger.yml 中配置 messenger,例如

framework:
    messenger:
        transports:
            async:
                dsn: "%env(MESSENGER_TRANSPORT_DSN)%"
                options:
                    queue_name: async
        routing:
            'App\Message\MyMessage': async
  • config/services.yml 中添加传输工厂
services:
# ...
    RetailCrm\Messenger\Beanstalkd\Transport\BeanstalkTransportFactory:
        tags: [messenger.transport_factory]

允许的传输选项

  • tube_name - beanstalkd 中的 tube 名称

  • timeout - 从 tube 接收作业的超时时间。默认 - 0

  • ttr - 作业的 ttr 值。默认 - 60

  • not_send_if_exists - 如果存在相同的作业,则不将作业发送到队列。默认 - false

所有选项都是可选的,如果没有指定 tube_name,则将使用默认队列 default

not_send_if_exists 选项仅在指定了锁存储时才会工作。为此,您需要通过添加对 setLockStorage 方法的调用来自定义 BeanstalkTransportFactory

class MyBeanstalkTransportFactory extends BeanstalkTransportFactory
//...
public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface
{
    return new BeanstalkTransport(
        Connection::fromDsn($dsn, $options)->setLockStorage($this->lockStorage),
        $serializer
    );
}
//...

并在 config/services.yml 中添加您的自定义传输工厂

services:
# ...
    App\Messenger\Custom\MyBeanstalkTransportFactory:
        tags: [messenger.transport_factory]

您的锁存储类必须实现 RetailCrm\Messenger\Beanstalkd\Storage\LockStorageInterface