This project aims to provide a very simple implementation of Topics over Azure Storage Queues, similar to Topics in Azure Service Bus.
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.
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
.
- more tests
- support for Isolated mode