-
Notifications
You must be signed in to change notification settings - Fork 303
Update Priority Queue Cloud Pattern #122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,20 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<TargetFramework>net6.0</TargetFramework> | ||
<TargetFramework>net8.0</TargetFramework> | ||
<AzureFunctionsVersion>v4</AzureFunctionsVersion> | ||
<OutputType>Exe</OutputType> | ||
<ImplicitUsings>enabled</ImplicitUsings> | ||
</PropertyGroup> | ||
<PropertyGroup> | ||
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.2.0" /> | ||
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.0.1" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<None Update="host.json"> | ||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
</None> | ||
<None Update="local.settings.json"> | ||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
<CopyToPublishDirectory>Never</CopyToPublishDirectory> | ||
</None> | ||
</ItemGroup> | ||
</Project> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.17.0" /> | ||
</ItemGroup> | ||
</Project> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,21 @@ | ||
using Microsoft.Azure.WebJobs; | ||
using Microsoft.Extensions.Logging; | ||
using Microsoft.Azure.Functions.Worker; | ||
|
||
namespace PriorityQueueConsumerHigh | ||
{ | ||
public static class PriorityQueueConsumerHighFn | ||
public class PriorityQueueConsumerHighFn | ||
{ | ||
[FunctionName("HighPriorityQueueConsumerFunction")] | ||
public static void Run([ServiceBusTrigger("messages", "highPriority", Connection = "ServiceBusConnection")]string highPriorityMessage, ILogger log) | ||
private readonly ILogger _logger; | ||
|
||
public PriorityQueueConsumerHighFn(ILogger<PriorityQueueConsumerHighFn> logger) | ||
{ | ||
_logger = logger; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you convert to automatic constructor? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Addressed |
||
|
||
[Function("HighPriorityQueueConsumerFunction")] | ||
public void Run([ServiceBusTrigger("messages", "highPriority", Connection = "ServiceBusConnectionString")] string highPriorityMessage) | ||
{ | ||
log.LogInformation($"C# ServiceBus topic trigger function processed message: {highPriorityMessage}"); | ||
_logger.LogInformation($"C# ServiceBus topic trigger function processed message: {highPriorityMessage}"); | ||
} | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
using Microsoft.Extensions.Hosting; | ||
|
||
var host = new HostBuilder() | ||
.ConfigureFunctionsWorkerDefaults() | ||
.Build(); | ||
|
||
host.Run(); |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"IsEncrypted": false, | ||
"Values": { | ||
"AzureWebJobsStorage": "UseDevelopmentStorage=true", | ||
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", | ||
"ServiceBusConnectionString": "SERVICE_BUS_CONNECTION_STRING" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you please convert this to use Microsoft Entra ID-based access instead of secret-based access? This would be a reader role assignment to the subscription to your user that you've |
||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,20 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<TargetFramework>net6.0</TargetFramework> | ||
<TargetFramework>net8.0</TargetFramework> | ||
<AzureFunctionsVersion>v4</AzureFunctionsVersion> | ||
<UserSecretsId>736bb6a2-68b4-463b-a8fb-3a90cba7cd4f</UserSecretsId> | ||
<OutputType>Exe</OutputType> | ||
<ImplicitUsings>enabled</ImplicitUsings> | ||
</PropertyGroup> | ||
<PropertyGroup> | ||
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.2.0" /> | ||
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.0.1" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<None Update="host.json"> | ||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
</None> | ||
<None Update="local.settings.json"> | ||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
<CopyToPublishDirectory>Never</CopyToPublishDirectory> | ||
</None> | ||
</ItemGroup> | ||
</Project> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" /> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same question on Http here There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agree. Addressed/removed. |
||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.17.0" /> | ||
</ItemGroup> | ||
</Project> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,21 @@ | ||
using Microsoft.Azure.WebJobs; | ||
using Microsoft.Extensions.Logging; | ||
using Microsoft.Azure.Functions.Worker; | ||
|
||
namespace PriorityQueueConsumerLow | ||
{ | ||
public static class PriorityQueueConsumerLowFn | ||
public class PriorityQueueConsumerLowFn | ||
{ | ||
[FunctionName("LowPriorityQueueConsumerFunction")] | ||
public static void Run([ServiceBusTrigger("messages", "lowPriority", Connection = "ServiceBusConnection")]string lowPriorityMessage, ILogger log) | ||
private readonly ILogger _logger; | ||
|
||
public PriorityQueueConsumerLowFn(ILogger<PriorityQueueConsumerLowFn> logger) | ||
{ | ||
_logger = logger; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you convert to automatic constructor? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Addressed |
||
|
||
[Function("LowPriorityQueueConsumerFunction")] | ||
public void Run([ServiceBusTrigger("messages", "lowPriority", Connection = "ServiceBusConnectionString")] string lowPriorityMessage) | ||
{ | ||
log.LogInformation($"C# ServiceBus topic trigger function processed message: {lowPriorityMessage}"); | ||
_logger.LogInformation($"C# ServiceBus topic trigger function processed message: {lowPriorityMessage}"); | ||
} | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
using Microsoft.Extensions.Hosting; | ||
|
||
var host = new HostBuilder() | ||
.ConfigureFunctionsWorkerDefaults() | ||
.Build(); | ||
|
||
host.Run(); |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"IsEncrypted": false, | ||
"Values": { | ||
"AzureWebJobsStorage": "UseDevelopmentStorage=true", | ||
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", | ||
"ServiceBusConnectionString": "SERVICE_BUS_CONNECTION_STRING" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you please convert this to use Microsoft Entra ID-based access instead of secret-based access? This would be a reader role assignment to the subscription to your user that you've |
||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,21 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<TargetFramework>net6.0</TargetFramework> | ||
<TargetFramework>net8.0</TargetFramework> | ||
<AzureFunctionsVersion>v4</AzureFunctionsVersion> | ||
<OutputType>Exe</OutputType> | ||
<ImplicitUsings>enabled</ImplicitUsings> | ||
</PropertyGroup> | ||
<PropertyGroup> | ||
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.2.0" /> | ||
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.0.1" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<None Update="host.json"> | ||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
</None> | ||
<None Update="local.settings.json"> | ||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
<CopyToPublishDirectory>Never</CopyToPublishDirectory> | ||
</None> | ||
</ItemGroup> | ||
</Project> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.17.0" /> | ||
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Timer" Version="4.3.0" /> | ||
</ItemGroup> | ||
</Project> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,31 +1,34 @@ | ||
using System; | ||
using System.Threading.Tasks; | ||
using Azure.Messaging.ServiceBus; | ||
using Microsoft.Azure.WebJobs; | ||
using Microsoft.Extensions.Logging; | ||
using Microsoft.Azure.Functions.Worker; | ||
|
||
namespace PriorityQueueSender | ||
{ | ||
public static class PriorityQueueSenderFn | ||
public class PriorityQueueSenderFn(ILogger<PriorityQueueSenderFn> logger, ServiceBusClient client) | ||
{ | ||
[FunctionName("PriorityQueueSenderFunction")] | ||
public static async Task Run( | ||
[TimerTrigger("0,30 * * * * *")] TimerInfo myTimer, | ||
[ServiceBus("messages", Connection = "ServiceBusConnection")] IAsyncCollector<ServiceBusMessage> collector ) | ||
private readonly ILogger<PriorityQueueSenderFn> _logger = logger; | ||
private readonly ServiceBusClient _client = client; | ||
|
||
[Function("PriorityQueueSenderFunction")] | ||
public async Task Run([TimerTrigger("0,30 * * * * *")] TimerInfo myTimer) | ||
{ | ||
var sender = _client.CreateSender("messages"); | ||
for (int i = 0; i < 10; i++) | ||
{ | ||
var messageId = Guid.NewGuid().ToString(); | ||
var lpMessage = new ServiceBusMessage() { MessageId = messageId }; | ||
lpMessage.ApplicationProperties["Priority"] = Priority.Low; | ||
lpMessage.Body = BinaryData.FromString($"Low priority message with Id: {messageId}"); | ||
await collector.AddAsync(lpMessage); | ||
await sender.SendMessageAsync(lpMessage); | ||
|
||
messageId = Guid.NewGuid().ToString(); | ||
var hpMessage = new ServiceBusMessage() { MessageId = messageId }; | ||
hpMessage.ApplicationProperties["Priority"] = Priority.High; | ||
hpMessage.Body = BinaryData.FromString($"High priority message with Id: {messageId}"); | ||
await collector.AddAsync(hpMessage); | ||
await sender.SendMessageAsync(hpMessage); | ||
} | ||
} | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
using Microsoft.Extensions.Hosting; | ||
using Microsoft.Extensions.Configuration; | ||
using Microsoft.Extensions.DependencyInjection; | ||
using Azure.Messaging.ServiceBus; | ||
|
||
var host = new HostBuilder() | ||
.ConfigureFunctionsWorkerDefaults() | ||
.ConfigureAppConfiguration((hostingContext, config) => | ||
{ | ||
config.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true); | ||
}) | ||
.ConfigureServices(services => | ||
{ | ||
var configuration = services.BuildServiceProvider().GetRequiredService<IConfiguration>(); | ||
|
||
services.AddSingleton(configuration); | ||
|
||
services.AddSingleton<ServiceBusClient>(sp => | ||
{ | ||
var connectionString = configuration.GetValue<string>("ServiceBusConnectionString"); | ||
return new ServiceBusClient(connectionString); | ||
}); | ||
}) | ||
.Build(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can this get converted to: services.AddAzureClients(cb => {
cb.AddServiceBusClient(...)
}); https://learn.microsoft.com/azure/azure-functions/dotnet-isolated-process-guide?tabs=linux#register-azure-clients -- The PG is trying to get folks to use this model for Azure SDK clients intead of the custom approach like you have here. |
||
|
||
host.Run(); |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"IsEncrypted": false, | ||
"Values": { | ||
"AzureWebJobsStorage": "UseDevelopmentStorage=true", | ||
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", | ||
"ServiceBusConnectionString": "SERVICE_BUS_CONNECTION_STRING" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you please convert this to use Microsoft Entra ID-based access instead of secret-based access? This would be a writer role assignment to the topic to your user that you've |
||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is Http a requirement for something here? I thought that was only for Http triggers?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agree. Addressed/removed.