Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Azure Storage Queue Laravel Package

microsoft/azure-storage-queue

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. 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.)

  2. 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
    
  3. Basic Usage

    use MicrosoftAzure\Storage\Queue\QueueService;
    
    $queueService = QueueService::create(
        getenv('AZURE_STORAGE_ACCOUNT'),
        getenv('AZURE_STORAGE_ACCESS_KEY'),
        getenv('AZURE_STORAGE_QUEUE_ENDPOINT')
    );
    
  4. First Use Case: Send a Message

    $queueService->createQueueIfNotExists('my-queue');
    $queueService->createMessage('my-queue', 'Hello, Azure!');
    

Implementation Patterns

Core Workflows

  1. Queue Management

    // Create/delete queues dynamically
    $queueService->createQueue('new-queue');
    $queueService->deleteQueue('new-queue');
    
    // List all queues
    $queues = $queueService->listQueues();
    
  2. 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());
    
  3. 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());
    }
    
  4. Metadata Handling

    // Update queue metadata (e.g., visibility timeout)
    $queueService->setQueueMetadata('my-queue', ['visibilitytimeout' => 30]);
    

Laravel Integration

  1. 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')
            );
        });
    }
    
  2. Facade

    // app/Facades/AzureQueue.php
    public static function send($queue, $message)
    {
        return app(QueueService::class)->createMessage($queue, $message);
    }
    
  3. Queue Worker

    // app/Jobs/ProcessAzureQueue.php
    public function handle()
    {
        $message = app(QueueService::class)->getMessage('my-queue');
        // Process message...
    }
    

Gotchas and Tips

Pitfalls

  1. Deprecation Warning

    • The package is retired as of March 2024. Migrate to azure/storage-queue (part of the new SDK).
    • Workaround: Use a wrapper or fork until migration.
  2. Connection Timeouts

    • Default timeout (30s) may fail for large payloads. Extend via:
      $queueService->setTimeout(60); // 60 seconds
      
  3. Message Size Limits

    • Max message size: 64KB. For larger data, use Azure Blob Storage or chunk messages.
  4. Visibility Timeout

    • Messages reappear after visibilitytimeout (default: 30s). Adjust carefully to avoid reprocessing:
      $queueService->setQueueMetadata('my-queue', ['visibilitytimeout' => 60]);
      
  5. Pop Receipts

    • Always delete messages using the PopReceipt from getMessage() or they’ll reappear in the queue.

Debugging

  1. Enable Logging

    $queueService->setLoggingCallback(function ($log) {
        error_log($log);
    });
    
  2. Common Errors

    • StorageException: Check credentials, queue names (must be lowercase, alphanumeric, -, _).
    • QueueNotFound: Verify queue exists with $queueService->listQueues().

Extension Points

  1. Custom Message Handling

    // Decode messages automatically
    $queueService->createMessage('my-queue', json_encode(['data' => 'test']));
    $message = json_decode($queueService->getMessage('my-queue')->getMessage(), true);
    
  2. 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);
        }
    }
    
  3. Environment-Specific Config

    // Use different endpoints for dev/staging/prod
    $endpoint = config('azure.queue.endpoint.' . app()->environment());
    $queueService = QueueService::create($account, $key, $endpoint);
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
craftcms/url-validator
directorytree/privacy-filter-classifier
directorytree/privacy-filter
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin
splash/metadata
splash/openapi
splash/scopes
splash/toolkit
testo/output-teamcity
testo/bridge-symfony