retailcrm / symfony-beanstalkd-messenger
Symfony Beanstalkd Messenger Bridge
Installs: 3 750
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 8
Forks: 4
Open Issues: 0
Type:symfony-bridge
Requires
- php: >=7.3
- ext-json: *
- pda/pheanstalk: ^4.0
- symfony/messenger: ^5.0|^6.0
Requires (Dev)
- phpmd/phpmd: ^2.9
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-11-03 16:14:27 UTC
README
Symfony beanstalkd messenger
Beanstalkd transport for symfony messenger
Installation
composer require retailcrm/symfony-beanstalkd-messenger
Usage
- in the
.env
config file add the connection credentials:
MESSENGER_TRANSPORT_DSN=beanstalkd://localhost:11300
-
create your messages and message handlers (about messages)
-
configure messenger in
config/packages/messenger.yml
, for example:
framework: messenger: transports: async: dsn: "%env(MESSENGER_TRANSPORT_DSN)%" options: queue_name: async routing: 'App\Message\MyMessage': async
- add transport factory in
config/services.yml
services: # ... RetailCrm\Messenger\Beanstalkd\Transport\BeanstalkTransportFactory: tags: [messenger.transport_factory]
Allowed transport options
-
tube_name
- tube name in beanstalkd -
timeout
- timeout for receiving jobs from tube. Default - 0 -
ttr
- ttr value for jobs. Default - 60 -
not_send_if_exists
- do not send a job to the queue only if such a job is already exist. Default -false
All options are optional, if tube_name
not specified will be used default queue default
.
The not_send_if_exists
option will only work if lock storage is specified. To do this, you need to customize the BeanstalkTransportFactory
by adding a call to the setLockStorage
method
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 ); } //...
and add your custom transport factory in config/services.yml
services: # ... App\Messenger\Custom\MyBeanstalkTransportFactory: tags: [messenger.transport_factory]
Your lock storage class must implement RetailCrm\Messenger\Beanstalkd\Storage\LockStorageInterface
.