A PHP 8.1+ & Symfony 5 / 6 / 7 bundle providing a Symfony Messenger transport for Azure Service Bus using the Azure REST API.
You only need to install the bundle using Composer:
composer require aymdev/messenger-azure-bundle
As it uses Symfony HttpClient, you will need to install a PSR-18 client. Example:
composer require nyholm/psr7
Your DSN must respect the following format to build the authentication header for a specific namespace:
azure://KEY_NAME:KEY_VALUE@NAMESPACE
Where
KEY_NAME
is your shared access key name,KEY_VALUE
is your shared access key andNAMESPACE
is your Azure Service Bus namespace. Important note: the keys can contain special characters that could break the URL parsing. Be sure to URL encode them.
Detailed list of transport options:
Option name | Description | Required | Default value |
---|---|---|---|
entity_path |
The topic or queue name. | Yes | |
subscription |
The subcription name to consume messages from a topic. | Only for topic consumer transports | |
token_expiry |
SAS token validity duration in seconds. | 3600 |
|
receive_mode |
Set to peek-lock to perform a non destructive read or to receive-and-delete to perform a destructive-read |
peek-lock |
Example config/packages/messenger.yaml
:
framework:
messenger:
transports:
azure_transport:
dsn: '%env(AZURE_SERVICE_BUS_DSN)%'
serializer: 'App\Messenger\YourAzureSerializer'
options:
entity_path: 'your-topic'
subscription: 'subscription-name'
token_expiry: 60
receive_mode: 'receive-and-delete'
This transport provides a few stamps:
The AymDev\MessengerAzureBundle\Messenger\Stamp\AzureMessageStamp
stamp is added to sent and received messages and
contains:
peek-lock
receive mode The AymDev\MessengerAzureBundle\Messenger\Stamp\AzureBrokerPropertiesStamp
stamp is used for the message properties.
It is automatically decoded when consuming a message and is encoded when producing a message if added to the envelope.
There is no serializer provided, but here is the expected array structure of an encoded envelope:
body
: your plain text messageheaders
: optional HTTP headers (either received from Azure Service Bus response or to send to the REST API)When a serializer throws a Symfony\Component\Messenger\Exception\MessageDecodingFailedException
while decoding a message,
it will be converted to a AymDev\MessengerAzureBundle\Messenger\Exception\SerializerDecodingException
which contains an
envelope with an empty message but with the same stamps as a successfully decoded message.
You can then listen to the console.error
Symfony event and get
the topic/queue name where then decoding failure happened, the original message, etc.