c20797c2de
Lock storage for not_send_if_exists option |
||
---|---|---|
.github/workflows | ||
Storage | ||
Tests/Transport | ||
Transport | ||
.editorconfig | ||
.gitignore | ||
composer.json | ||
LICENSE | ||
phpcs.xml | ||
phpmd.xml | ||
phpunit.xml.dist | ||
README.md |
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
.