Queue Storage

Azure Queue Storage over the native REST (XML) protocol, served at https://127.0.0.1:10001/devstoreaccount1 and compatible with the azqueue SDK and the az storage queue / az storage message commands. Queue state is persisted under /data. See Configuration to change ports, addresses, and the data directory.

localaz serves every HTTP API over TLS. Trust the self-signed certificate it writes to <data>/tls/localaz.crt (./localaz-data/tls/localaz.crt with the Docker volume from Get Started); the examples below show how.

Supported operations

OperationREST surface
List QueuesGET /{account}?comp=list
Create / Delete QueuePUT / DELETE /{account}/{queue}
Get / Set Queue MetadataGET / PUT /{account}/{queue}?comp=metadata
Put MessagePOST /{account}/{queue}/messages
Get / Peek MessagesGET /{account}/{queue}/messages[?peekonly=true]
Update MessagePUT /{account}/{queue}/messages/{messageid}
Delete MessageDELETE /{account}/{queue}/messages/{messageid}
Clear MessagesDELETE /{account}/{queue}/messages

Queue metadata, the approximate message count, visibility timeouts and pop receipts, message TTL (including the infinite -1 TTL), and dequeue counts are supported.

Not implemented: SAS and Shared Key signature verification.

Azure CLI

Trust localaz’s certificate:

export SSL_CERT_FILE=./localaz-data/tls/localaz.crt
export REQUESTS_CA_BUNDLE="$SSL_CERT_FILE"

Generate a random storage key:

export AZURE_STORAGE_KEY="$(openssl rand -base64 64 | tr -d '\n')"

Configure the connection string and run the CLI:

export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=devstoreaccount1;AccountKey=${AZURE_STORAGE_KEY};QueueEndpoint=https://127.0.0.1:10001/devstoreaccount1;"

az storage queue create --name work-items
az storage message put --queue-name work-items --content "hello-from-the-cli"
az storage message peek --queue-name work-items
az storage message get --queue-name work-items
az storage message clear --queue-name work-items
az storage queue delete --name work-items

Go SDK

Trust localaz’s certificate:

export SSL_CERT_FILE=./localaz-data/tls/localaz.crt

Generate a random storage key:

export AZURE_STORAGE_KEY="$(openssl rand -base64 64 | tr -d '\n')"
package main

import (
	"context"
	"fmt"
	"os"

	"github.com/Azure/azure-sdk-for-go/sdk/storage/azqueue"
)

func main() {
	ctx := context.Background()
	connStr := "DefaultEndpointsProtocol=https;AccountName=devstoreaccount1;" +
		"AccountKey=" + os.Getenv("AZURE_STORAGE_KEY") + ";" +
		"QueueEndpoint=https://127.0.0.1:10001/devstoreaccount1;"
	svc, err := azqueue.NewServiceClientFromConnectionString(connStr, nil)
	if err != nil {
		panic(err)
	}

	queue := svc.NewQueueClient("work-items")
	queue.Create(ctx, nil)
	queue.EnqueueMessage(ctx, "hello queue", nil)

	resp, err := queue.DequeueMessage(ctx, nil)
	if err != nil {
		panic(err)
	}
	msg := resp.Messages[0]
	fmt.Println(*msg.MessageText)

	queue.DeleteMessage(ctx, *msg.MessageID, *msg.PopReceipt, nil)
}