Extends the Symfony Messenger component to handle the filesystem transport. Queues are processed locally by storing and retrieving messages from the filesystem.
The queuing is implemented as a LIFO (Last-In, First-Out) list, this to optimize the filesystem usage and the r/w operations.
composer require pnz/messenger-filesystem-transport
This transport handles the filesystem://
schema, use the FilesystemTransportFactory
to create the transport.
Symfony configuration: use the Filesystem Transport Bundle Bundle.
- Register the transport factory:
# config/services.yaml
Pnz\Messenger\FilesystemTransport\FilesystemTransportFactory:
arguments:
$serializer: '@messenger.transport.symfony_serializer'
# The following lines are not needed if "autowire" is enabled
$filesystem: '@filesystem'
$lockFactory: '@lock.factory'
# Enable the `filesystem://` transport to be auto-discovered, this is not needed when "autoconfigure" is enabled
tags: ['messenger.transport_factory']
- Configure the Filesystem transport:
# config/packages/messenger.yaml
parameters:
# The path *MUST* specify an absolute path of the directory where the queue will be stored
# Example1: the queue messages will be stored in the project's `var/queue` directory
env(MESSENGER_TRANSPORT_DSN): "filesystem://%kernel.project_dir%/var/queue"
# Example2: use the `/tmp/queue` directory (note the triple `/`)
env(MESSENGER_TRANSPORT_DSN): "filesystem:///tmp/queue"
framework:
messenger:
transports:
filesystem: '%env(resolve:MESSENGER_TRANSPORT_DSN)%'
routing:
App\Message\MyMessage: filesystem
The DSN includes the following query parameters:
compress
: Enable/Disable compression of messages storage (gzinflate/gzdeflate), usecompress=true
(default: false)loop_sleep
: Define the sleep interval between loops in micro-seconds, useloop_sleep=MICRO-SECONDS
(default: 500000)
Example:
# .env
# Enable compression, and sleep for 0.8 seconds during loops if the queue is empty
MESSENGER_TRANSPORT_DSN="filesystem://%kernel.project_dir%/var/queue/default?compress=true&loop_sleep=800000"