Interact with Azure Queue Storage services seamlessly.
The azqueue module in the Azure SDK for Go provides a robust and idiomatic
way to interact with Azure Queue Storage. Azure Queue Storage is a service that stores
large numbers of small messages. You can access these messages from anywhere in the world
via HTTP or HTTPS. A queue can contain any number of messages.
This module simplifies common queue operations such as sending messages, receiving messages, dequeuing messages, and managing queues and their metadata.
To use the azqueue module, you'll need to install it first:
go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
go get github.com/Azure/azure-sdk-for-go/sdk/azcore/to
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azqueue
Authentication is typically handled using Azure Identity credentials.
import (
"context"
"log"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azqueue"
)
func main() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
// Replace with your Azure Storage Account Name
accountName := "yourstorageaccountname"
// The Queue endpoint is typically: https://{accountName}.queue.core.windows.net
// You can also use a connection string directly:
// connStr := "DefaultEndpointsProtocol=https;AccountName=yourstorageaccountname;AccountKey=youraccountkey;EndpointSuffix=core.windows.net"
// queueClient, err := azqueue.NewClientFromConnectionString(connStr, nil)
queueServiceClient, err := azqueue.NewServiceClient(accountName, cred, nil)
if err != nil {
log.Fatalf("failed to create queue service client: %v", err)
}
ctx := context.Background()
queueName := "my-test-queue"
// Create a new queue client for the specific queue
queueClient, err := queueServiceClient.NewClient(queueName)
if err != nil {
log.Fatalf("failed to create queue client: %v", err)
}
// Example usage follows...
}
azqueue.ClientRepresents a client for a specific Azure Queue Storage queue.
NewClient(queueName string, serviceClient *azqueue.ServiceClient, options *azqueue.ClientOptions) (*azqueue.Client, error)func (serviceClient *ServiceClient) NewClient(queueName string, options *ClientOptions) (*Client, error)
Creates a new client for a specific queue within the service client's account.
NewClientFromConnectionString(connectionString string, options *ClientOptions) (*Client, error)func NewClientFromConnectionString(connectionString string, options *ClientOptions) (*Client, error)
Creates a new client from a connection string.
azqueue.ClientEnqueueMessage(ctx context.Context, messageText string, options *EnqueueMessageOptions) (EnqueueMessageResponse, error)func (client *Client) EnqueueMessage(ctx context.Context, messageText string, options *EnqueueMessageOptions) (EnqueueMessageResponse, error)
Adds a message to the specified queue.
*EnqueueMessageOptions - Optional settings for the enqueue operation.
EnqueueMessageResponse - The response containing details of the enqueued message.
ReceiveMessages(ctx context.Context, options *ReceiveMessagesOptions) (ReceiveMessagesResponse, error)func (client *Client) ReceiveMessages(ctx context.Context, options *ReceiveMessagesOptions) (ReceiveMessagesResponse, error)
Retrieves one or more messages from the front of the queue, but does not delete them.
*ReceiveMessagesOptions - Optional settings, such as the number of messages to retrieve and the visibility timeout.
ReceiveMessagesResponse - The response containing the received messages.
DeleteMessage(ctx context.Context, popReceipt string, messageID string, options *DeleteMessageOptions) (DeleteMessageResponse, error)func (client *Client) DeleteMessage(ctx context.Context, popReceipt string, messageID string, options *DeleteMessageOptions) (DeleteMessageResponse, error)
Deletes a specific message from the queue.
*DeleteMessageOptions - Optional settings.
DeleteMessageResponse - The response indicating the success of the deletion.
UpdateMessage(ctx context.Context, popReceipt string, messageID string, options *UpdateMessageOptions) (UpdateMessageResponse, error)func (client *Client) UpdateMessage(ctx context.Context, popReceipt string, messageID string, options *UpdateMessageOptions) (UpdateMessageResponse, error)
Updates the visibility of a message. This is useful for extending the time-out on a message that is being processed.
*UpdateMessageOptions - Optional settings, including the new visibility timeout and message text.
UpdateMessageResponse - The response containing the updated message details.
CreateQueue(ctx context.Context, options *CreateQueueOptions) (CreateQueueResponse, error)func (serviceClient *ServiceClient) CreateQueue(ctx context.Context, options *CreateQueueOptions) (CreateQueueResponse, error)
Creates a new queue under the specified account.
*CreateQueueOptions - Optional settings for queue creation.
CreateQueueResponse - The response confirming queue creation.
This example demonstrates receiving, processing, and deleting messages from a queue.
import (
"context"
"log"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azqueue"
)
func main() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
accountName := "yourstorageaccountname" // Replace with your storage account name
queueServiceClient, err := azqueue.NewServiceClient(accountName, cred, nil)
if err != nil {
log.Fatalf("failed to create queue service client: %v", err)
}
queueName := "my-processing-queue"
queueClient, err := queueServiceClient.NewClient(queueName)
if err != nil {
log.Fatalf("failed to create queue client: %v", err)
}
ctx := context.Background()
// Send a sample message
_, err = queueClient.EnqueueMessage(ctx, "Process this task!", &azqueue.EnqueueMessageOptions{
MessageText: to.Ptr("Process this task!"), // Use to.Ptr from "github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
})
if err != nil {
log.Fatalf("failed to enqueue message: %v", err)
}
log.Println("Message enqueued.")
// Try to receive messages
resp, err := queueClient.ReceiveMessages(ctx, &azqueue.ReceiveMessagesOptions{
NumberOfMessages: to.Ptr(int32(1)),
// Set a reasonable visibility timeout so messages aren't lost if processing fails
VisibilityTimeout: to.Ptr(int32(30)), // 30 seconds
})
if err != nil {
log.Fatalf("failed to receive messages: %v", err)
}
if len(resp.Messages) > 0 {
message := resp.Messages[0]
log.Printf("Received message: ID=%s, Text=%s\n", *message.MessageID, *message.MessageText)
// Simulate processing the message
log.Println("Processing message...")
time.Sleep(2 * time.Second)
log.Println("Message processed successfully.")
// Delete the message
_, err = queueClient.DeleteMessage(ctx, *message.PopReceipt, *message.MessageID, nil)
if err != nil {
log.Fatalf("failed to delete message: %v", err)
}
log.Println("Message deleted.")
} else {
log.Println("No messages in the queue.")
}
}