AzureStorageTopics 1.0.0
dotnet add package AzureStorageTopics --version 1.0.0
NuGet\Install-Package AzureStorageTopics -Version 1.0.0
<PackageReference Include="AzureStorageTopics" Version="1.0.0" />
paket add AzureStorageTopics --version 1.0.0
#r "nuget: AzureStorageTopics, 1.0.0"
// Install AzureStorageTopics as a Cake Addin #addin nuget:?package=AzureStorageTopics&version=1.0.0 // Install AzureStorageTopics as a Cake Tool #tool nuget:?package=AzureStorageTopics&version=1.0.0
Azure Storage Topics
This project aims to provide a very simple implementation of Topics over Azure Storage Queues, similar to Topics in Azure Service Bus.
Why?
Simply because being able to forward the same message (more or less) to multiple queues in one go is very convenient. Single queues are useful when dealing with Commands, which would expect to be pulled and processed by a single Consumer. Moreover, the Producer is aware and is expecting that there's a Consumer waiting on the other side. But when we need to broadcast an Event instead, the Producer doesn't know how many different Consumers there will be. Nor cares. The Producer's only goal is to inform the world that something happened.
How does it work?
The underlying idea is Messages can be sent to a virtual "topic", which in turn would forward it to the registered "subscriptions".
Simply add the Nuget package to your Azure Functions project, then add the Output binding:
[FunctionName(nameof(SendToTopic))]
public static async Task<IActionResult> SendToTopic(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
[StorageTopic("MyTopic")] IAsyncCollector<string> outputTopic)
{
await outputTopic.AddAsync("hello world");
return new OkObjectResult("wow");
}
Subscriptions can be configured directly in the host.json
file:
{
"extensions": {
"storageTopics": {
"topics": {
"MyTopic": {
"subscriptions": [
{
"name": "Subscription1"
},
{
"name": "Subscription2"
}
]
}
}
}
}
}
The library will automatically create the queues if not existing, using this naming convention: topic-subscription
, lowercase:
The setting containing the connection string to the Storage Account can be specified by providing the ConnectionSettingName
property to the StorageTopic
attribute:
[FunctionName(nameof(SendToTopic))]
public static async Task<IActionResult> SendToTopic(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
[StorageTopic("MyTopic", ConnectionSettingName="AzureWebJobsStorage")] IAsyncCollector<string> outputTopic)
The default value is AzureWebJobsStorage
.
TODO
- more tests
- support for Isolated mode
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | 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.1
- Azure.Storage.Queues (>= 12.18.0)
- Microsoft.Azure.WebJobs (>= 3.0.39)
- Microsoft.Azure.WebJobs.Core (>= 3.0.39)
- Microsoft.Azure.WebJobs.Extensions (>= 5.0.0)
- Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator (>= 4.0.1)
- Microsoft.Extensions.Options (>= 8.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.