Skip to content
Get Started for Free

Queue Storage

Azure Queue Storage is a messaging service for storing large numbers of messages that can be accessed from anywhere over HTTP or HTTPS. It is commonly used to decouple application components and build asynchronous processing workflows. Queue Storage is useful for buffering work items between producers and consumers. For more information, see What is Azure Queue Storage?

LocalStack for Azure provides a local environment for building and testing applications that make use of Azure Queue Storage. The supported APIs are available on our API Coverage section, which provides information on the extent of Queue Storage’s integration with LocalStack.

This guide is designed for users new to Queue Storage and assumes basic knowledge of the Azure CLI and our azlocal wrapper script.

Start your LocalStack container using your preferred method. For more information, see Introduction to LocalStack for Azure.

[!NOTE] As an alternative to using the azlocal CLI, customers can run az start-interception. This command points the az CLI away from the public Azure cloud management API and toward the local emulator API. To revert this configuration, use azlocal stop-interception, which re-configures the CLI to send commands to the official Azure platform management REST API. At this time, there is no full parity between azlocal commands and az commands after running az start-interception. Therefore, this technique is not fully interchangeable.

Create a resource group to contain your storage resources:

Terminal window
azlocal group create \
--name rg-queue-demo \
--location westeurope
Output
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-queue-demo",
"location": "westeurope",
"managedBy": null,
"name": "rg-queue-demo",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}

Create an Azure storage account for Queue Storage:

Terminal window
azlocal storage account create \
--name stqueuedemols \
--resource-group rg-queue-demo \
--location westeurope \
--sku Standard_LRS
Output
{
...
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-queue-demo/providers/Microsoft.Storage/storageAccounts/stqueuedemols",
...
"name": "stqueuedemols",
...
"placement": null,
"primaryEndpoints": {
"blob": "https://stqueuedemolsblob.localhost.localstack.cloud:4566",
...
"queue": "https://stqueuedemolsqueue.localhost.localstack.cloud:4566",
...
},
....
}

There are three ways to authenticate storage queue commands against the emulator:

Retrieve the account key and pass it with --account-name and --account-key:

Terminal window
ACCOUNT_KEY=$(azlocal storage account keys list \
--account-name stqueuedemols \
--resource-group rg-queue-demo \
--query "[0].value" \
--output tsv)
azlocal storage queue list \
--account-name stqueuedemols \
--account-key "$ACCOUNT_KEY"

Use --auth-mode login to authenticate with the current session credentials:

Terminal window
azlocal storage queue list \
--account-name stqueuedemols \
--auth-mode login

Bundle the account name and key into a single value:

Terminal window
CONNECTION_STRING=$(azlocal storage account show-connection-string \
--name stqueuedemols \
--resource-group rg-queue-demo \
--query connectionString -o tsv)
azlocal storage queue list \
--connection-string "$CONNECTION_STRING"

The remaining examples in this guide use connection strings for brevity.

Create a queue:

Terminal window
azlocal storage queue create \
--name app-queue \
--connection-string "$CONNECTION_STRING"
Output
{
"created": true
}

Verify the queue exists:

Terminal window
azlocal storage queue exists \
--name app-queue \
--connection-string "$CONNECTION_STRING"
Output
{
"exists": true
}

List queues in the storage account:

Terminal window
azlocal storage queue list \
--connection-string "$CONNECTION_STRING"
Output
[
{
"approximateMessageCount": null,
"metadata": null,
"name": "app-queue"
}
]

Add a message to the queue:

Terminal window
azlocal storage message put \
--queue-name app-queue \
--content "hello-from-localstack" \
--connection-string "$CONNECTION_STRING"
Output
{
"content": "hello-from-localstack",
...
"id": "a253ff4a-7b9c-434e-9c33-deae3070193c",
...
}

Peek at messages without consuming them:

Terminal window
azlocal storage message peek \
--queue-name app-queue \
--connection-string "$CONNECTION_STRING"
Output
[
{
"content": "hello-from-localstack",
...
"id": "a253ff4a-7b9c-434e-9c33-deae3070193c",
"insertionTime": "2026-02-27T07:45:14+00:00",
...
}
]

Get (dequeue) a message from the queue, which makes it invisible to other consumers for the visibility timeout period:

Terminal window
azlocal storage message get \
--queue-name app-queue \
--connection-string "$CONNECTION_STRING" \
--output json
Output
[
{
"content": "hello-from-localstack",
...
"id": "a253ff4a-7b9c-434e-9c33-deae3070193c",
"popReceipt": "...",
...
}
]

The Queue Storage emulator supports the following features:

  • Data plane REST API: Queue CRUD, message operations (put, peek, get, delete), queue metadata, stored access policies, and SAS token generation.
  • Control plane (ARM) REST API: Create and get queues, get and set queue service properties via Azure Resource Manager.
  • Multiple authentication modes: Storage account key, login credentials, and connection strings.
  • No data persistence across restarts: Queue data is not persisted and is lost when the LocalStack emulator is stopped or restarted.
  • Queue endpoint URL: The service type is appended to the account name ({account}queue.localhost.localstack.cloud:{port}) rather than used as a subdomain ({account}.queue.core.windows.net).
  • Queue service properties: set_service_properties is a no-op and get_service_properties returns empty defaults, unlike Azure where CORS, logging, and metrics settings are persisted and applied.
  • Storage account keys: Keys are emulator-generated rather than managed by Azure.
  • Header validation: Unsupported request headers or parameters are silently accepted instead of being rejected.
  • API version enforcement: The emulator does not validate the x-ms-version header; all API versions are accepted.

The following environment variables can be set on the LocalStack container to customize Queue Storage behavior:

  • STORAGE_EXPOSE_AZURITE_PORTS: When set to false, internal storage ports are not mapped to the host, disabling direct connectivity to the storage backend. Defaults to true.

The following sample demonstrates how to use Queue Storage with LocalStack for Azure:

OperationImplemented
Page 1 of 0
Was this page helpful?