This bundle provides a deep integration of the Lock component, by default, each task receive a key once scheduled.
Given the following framework.yaml
file:
# see https://symfony.com/doc/current/reference/configuration/framework.html
framework:
# ...
lock:
scheduler: 'sqlite:///%kernel.project_dir%/var/lock.db'
The lock store to use by the TaskLockBagMiddleware can be defined:
scheduler_bundle:
lock_store: 'lock.scheduler.store'
# ...
PS: As conventions can evolve, you can retrieve the store name using bin/console debug:container store
:
$ bin/console debug:container store
Select one of the following services to display its information:
[0] http_cache.store
[1] lock.store.combined.abstract
[2] scheduler.lock_store.factory
[3] lock.scheduler.store
[4] Symfony\Component\Lock\PersistingStoreInterface $schedulerLockStore
[5] lock.default.store
[6] lock.store
[7] Symfony\Component\Lock\PersistingStoreInterface
# ...
As explained in the configuration, by default, this bundle creates a FlockStore
,
even if it's enough in test
or dev
environment, this store does not support serializing the key
(which occurs if you use external transport), consider using a persisting store in production.
By default, this bundle will lock tasks before executing them, as the default store is FlockStore
,
tasks can be locked between processes BUT you may want to use an external lock store, as explained earlier,
you can easily define a store and set the lock_store
to use it.
For more information, see the Worker.
Keep in mind that the store MUST support sharing the key to lock tasks between processes.