Install the Package
composer require microsoft/azure-storage-queue
(Note: Due to deprecation, evaluate alternatives like azure/storage-blob-php or azure/azure-storage-php post-March 2024.)
Configure Connection
Add credentials to .env:
AZURE_STORAGE_ACCOUNT=your_account_name
AZURE_STORAGE_ACCESS_KEY=your_access_key
AZURE_STORAGE_QUEUE_ENDPOINT=https://your_account_name.queue.core.windows.net
Basic Usage
use MicrosoftAzure\Storage\Queue\QueueService;
$queueService = QueueService::create(
getenv('AZURE_STORAGE_ACCOUNT'),
getenv('AZURE_STORAGE_ACCESS_KEY'),
getenv('AZURE_STORAGE_QUEUE_ENDPOINT')
);
First Use Case: Send a Message
$queueService->createQueueIfNotExists('my-queue');
$queueService->createMessage('my-queue', 'Hello, Azure!');
Queue Management
// Create/delete queues dynamically
$queueService->createQueue('new-queue');
$queueService->deleteQueue('new-queue');
// List all queues
$queues = $queueService->listQueues();
Message Operations
// Send/receive messages
$queueService->createMessage('my-queue', json_encode(['task' => 'process']));
$message = $queueService->getMessage('my-queue');
$queueService->deleteMessage('my-queue', $message->getId(), $message->getPopReceipt());
Batch Processing
// Peek at messages without removing them
$messages = $queueService->peekMessages('my-queue', 10);
foreach ($messages as $msg) {
// Process logic
$queueService->deleteMessage('my-queue', $msg->getId(), $msg->getPopReceipt());
}
Metadata Handling
// Update queue metadata (e.g., visibility timeout)
$queueService->setQueueMetadata('my-queue', ['visibilitytimeout' => 30]);
Service Provider
// app/Providers/AzureQueueServiceProvider.php
public function register()
{
$this->app->singleton(QueueService::class, function ($app) {
return QueueService::create(
config('azure.storage.account'),
config('azure.storage.key'),
config('azure.storage.queue.endpoint')
);
});
}
Facade
// app/Facades/AzureQueue.php
public static function send($queue, $message)
{
return app(QueueService::class)->createMessage($queue, $message);
}
Queue Worker
// app/Jobs/ProcessAzureQueue.php
public function handle()
{
$message = app(QueueService::class)->getMessage('my-queue');
// Process message...
}
Deprecation Warning
azure/storage-queue (part of the new SDK).Connection Timeouts
$queueService->setTimeout(60); // 60 seconds
Message Size Limits
Visibility Timeout
visibilitytimeout (default: 30s). Adjust carefully to avoid reprocessing:
$queueService->setQueueMetadata('my-queue', ['visibilitytimeout' => 60]);
Pop Receipts
PopReceipt from getMessage() or they’ll reappear in the queue.Enable Logging
$queueService->setLoggingCallback(function ($log) {
error_log($log);
});
Common Errors
StorageException: Check credentials, queue names (must be lowercase, alphanumeric, -, _).QueueNotFound: Verify queue exists with $queueService->listQueues().Custom Message Handling
// Decode messages automatically
$queueService->createMessage('my-queue', json_encode(['data' => 'test']));
$message = json_decode($queueService->getMessage('my-queue')->getMessage(), true);
Retry Logic
// Exponential backoff for transient failures
$attempts = 0;
while ($attempts < 3) {
try {
$queueService->getMessage('my-queue');
break;
} catch (\Exception $e) {
$attempts++;
sleep(2 ** $attempts);
}
}
Environment-Specific Config
// Use different endpoints for dev/staging/prod
$endpoint = config('azure.queue.endpoint.' . app()->environment());
$queueService = QueueService::create($account, $key, $endpoint);
How can I help you explore Laravel packages today?