Akka.Streams.Azure.StorageQueue
1.5.74
Prefix Reserved
dotnet add package Akka.Streams.Azure.StorageQueue --version 1.5.74
NuGet\Install-Package Akka.Streams.Azure.StorageQueue -Version 1.5.74
<PackageReference Include="Akka.Streams.Azure.StorageQueue" Version="1.5.74" />
<PackageVersion Include="Akka.Streams.Azure.StorageQueue" Version="1.5.74" />
<PackageReference Include="Akka.Streams.Azure.StorageQueue" />
paket add Akka.Streams.Azure.StorageQueue --version 1.5.74
#r "nuget: Akka.Streams.Azure.StorageQueue, 1.5.74"
#:package Akka.Streams.Azure.StorageQueue@1.5.74
#addin nuget:?package=Akka.Streams.Azure.StorageQueue&version=1.5.74
#tool nuget:?package=Akka.Streams.Azure.StorageQueue&version=1.5.74
Akka.Streams.Azure.StorageQueue
Azure Queue Storage sources and sinks for Akka.NET Streams, using an Azure.Storage.Queues.QueueClient supplied by your application. This package targets .NET Standard 2.0 and .NET 6.0.
dotnet add package Akka.Streams.Azure.StorageQueue
The connector sends strings and receives SDK QueueMessage values. It does not serialize application objects, create queues, or delete received messages automatically. Configure credentials, endpoints and message encoding on your QueueClient.
Send messages
Set AZURE_STORAGE_CONNECTION_STRING to your account connection string. This complete example explicitly creates an orders queue, sends two messages, and waits for the final send:
using Akka.Actor;
using Akka.Streams;
using Akka.Streams.Azure.StorageQueue;
using Akka.Streams.Dsl;
using Azure.Storage.Queues;
var queue = new QueueClient(
Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING")
?? throw new InvalidOperationException("Set AZURE_STORAGE_CONNECTION_STRING."), "orders");
await queue.CreateIfNotExistsAsync();
var system = ActorSystem.Create("queue-publisher");
try
{
await Source.From(new[] { "first", "second" })
.RunWith(QueueSink.Create(queue), system.Materializer());
}
finally
{
await system.Terminate();
}
QueueSink.Create consumes strings, sends one message at a time, and materializes a Task. SourceExtension.ToStorageQueue runs the same sink directly. The task completes after upstream finishes and the final send succeeds. AddRequestOptions forwards an optional time-to-live and initial visibility delay to QueueClient.SendMessageAsync; both default to null, leaving their defaults to the SDK/service.
Receive and delete after processing
Run this example separately against the same queue. It processes two messages and explicitly deletes each one after processing:
using Akka.Actor;
using Akka.Streams;
using Akka.Streams.Azure.StorageQueue;
using Akka.Streams.Dsl;
using Azure.Storage.Queues;
var queue = new QueueClient(
Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING")
?? throw new InvalidOperationException("Set AZURE_STORAGE_CONNECTION_STRING."), "orders");
var system = ActorSystem.Create("queue-subscriber");
try
{
await QueueSource.Create(queue, prefetchCount: 1,
options: new GetRequestOptions(visibilityTimeout: TimeSpan.FromMinutes(1)))
.Take(2)
.SelectAsync(1, async message =>
{
Console.WriteLine(message.MessageText); // Replace with your processing code.
await queue.DeleteMessageAsync(message.MessageId, message.PopReceipt);
return message.MessageId;
})
.RunWith(Sink.Ignore<string>(), system.Materializer());
}
finally
{
await system.Terminate();
}
QueueSource.Create materializes NotUsed. Its public QueueSource stage constructor accepts the same settings. Defaults are prefetchCount: 10, a ten-second polling interval after an empty receive, and a GetRequestOptions.VisibilityTimeout of null, which delegates visibility duration to the SDK/service.
Receiving makes a message temporarily invisible; it does not acknowledge successful processing. Delete with the current message ID and pop receipt after processing succeeds. Without deletion, messages can be delivered again when visibility expires. Long processing may require QueueClient.UpdateMessageAsync; use its new pop receipt for subsequent updates or deletion. Choose visibility duration and receive batch size for the time messages spend waiting in your stream. SDK/service message-size and lifetime limits still apply.
Default stopping supervision propagates failures. For the sink's existing send-failure handling, Resume retries the same message and Restart skips it. Retries can duplicate sends, and skipping can lose a message. For receive failures, a non-stopping source strategy schedules another poll. The connector does not provide exactly-once delivery or poison-message routing.
Lifetime and local tests
Your application owns the QueueClient, queue and ActorSystem. Stream completion or cancellation does not delete the queue. Stop streams before shutting down their system or backing service. An existing SDK request may remain in flight after stream cancellation.
From the repository root, with the pinned .NET SDK and Docker running Linux containers:
dotnet test src/Azure/Akka.Streams.Azure.StorageQueue.Tests/Akka.Streams.Azure.StorageQueue.Tests.csproj -c Release --framework net10.0
The tests use Testcontainers.Azurite to start Azurite 3.35.0 for each case, discover its connection string, and remove the owned container afterward. The test client explicitly uses QueueClientOptions.ServiceVersion.V2024_05_04, the protocol version used by the original SDK, because newer SDK defaults can exceed the emulator's supported API versions. API-version validation stays enabled. Your application's client selects its own service version. The tests do not require a separately installed Azurite, fixed host ports or an Azure account. The Windows/.NET Framework test target can also run when a Linux Docker endpoint is available.
Azurite tests establish the exercised queue operations against that pinned emulator. They do not establish Azure identity configuration, service-scale behavior or managed-service durability. See Azure Queue Storage client documentation and Azurite's documented differences.
License
Apache-2.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Akka.Streams (>= 1.5.74)
- Azure.Storage.Queues (>= 12.28.1)
-
net6.0
- Akka.Streams (>= 1.5.74)
- Azure.Storage.Queues (>= 12.28.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Akka.Streams.Azure.StorageQueue:
| Package | Downloads |
|---|---|
|
SnD.Sdk
SDK for Sneaks&Data OSS Projects |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.5.74 | 0 | 11/13/2026 |
| 1.5.59 | 414 | 1/27/2026 |
| 1.5.57 | 265 | 12/23/2025 |
| 1.5.40 | 359 | 4/18/2025 |
| 1.5.37 | 536 | 1/23/2025 |
| 1.5.33 | 613 | 12/26/2024 |
| 1.5.28 | 1,939 | 9/9/2024 |
| 1.5.18 | 20,567 | 3/29/2024 |
| 1.5.15 | 2,391 | 1/11/2024 |
| 1.5.8 | 2,814 | 6/30/2023 |
| 1.5.7 | 773 | 5/31/2023 |
| 1.5.0.1 | 897 | 3/7/2023 |
| 1.5.0 | 917 | 3/3/2023 |
| 1.4.49 | 888 | 3/3/2023 |
| 1.0.1-beta4 | 5,319 | 10/21/2022 |
| 1.0.1-beta3 | 793 | 10/21/2022 |
| 1.0.1-beta2 | 1,581 | 7/25/2022 |
| 1.0.1-beta1 | 832 | 6/8/2022 |
| 1.0.0-beta9 | 804 | 3/17/2022 |
| 1.0.0-beta8 | 2,997 | 12/21/2021 |
* Bump the minimum Akka.NET dependency to [1.5.74](https://github.com/akkadotnet/akka.net/releases/tag/1.5.74), with aligned Streams and TestKit dependencies.
* Include an individual README in each of the twelve connector packages, with usage, ownership, delivery semantics, limitations and linked NuGet version/download badges. Expand the repository README and documentation navigation.
* Update compatible Azure, AWS, AMQP and SignalR dependencies. Package READMEs document remaining SDK support and version limitations.
* Azure Service Bus JSON sources await successful message completion before emitting values and propagate settlement failures.
* Fix SQS batch-response correlation when response entries arrive in a different order.
* Improve SNS and Kinesis completion, cancellation and failure handling.
* Remove blocking SignalR send waits while preserving sequential delivery and existing materialized values.
* Propagate AMQP conversion and connection failures through the materialized completion task.
* Correct CSV parsing across split CRLF/escape sequences and XML parser empty-element/document completion, including reader and feeder cleanup.
* Improve rotating-file sink cleanup on completion and failures.
* Add required service integration, package/API, unchanged-consumer and packaged-example validation. Harden Event Hubs startup and Service Bus polling tests.
* Replace legacy FluentAssertions usages with xUnit assertions, retaining their payload, ordering, exception and deadline checks.
* Mark the historical `Akka.Streams.Channels`, `Akka.Streams.Azure.EventHub.V5` and `Akka.Streams.SignalR.AspNetCore` packages as Legacy on NuGet. See the [migration guide](https://alpakka.getakka.net/documentation/LegacyPackages.html) for their maintained replacements and compatibility requirements.
**Upstream compatibility:** Alpakka retains its public APIs and library targets. Raising the Akka.NET minimum from 1.5.60 inherits upstream binary changes: the old `RetrySupport.Retry` overload with an `int randomFactor` is replaced by a `double` overload, and `ISourceQueue<T>` requires `OfferAsync(T, CancellationToken)`. Applications using that old compiled overload or custom queue implementations need to update and rebuild against the new dependencies.