scenarios/aca-internal/bicep/sample-apps/jobs/src/aca-jobs/MessageProcessor.cs (42 lines of code) (raw):
using aca_jobs.Model;
using Azure.Identity;
using Azure.Messaging.ServiceBus;
using Microsoft.Extensions.Options;
namespace aca_jobs;
public class MessageProcessor : IJob
{
private readonly ILogger<Program> _logger;
private readonly ConfigurationOptions _settings;
private readonly ServiceBusReceiver _receiver;
private readonly ServiceBusSender _sender;
public MessageProcessor(ILogger<Program> logger, IOptions<ConfigurationOptions> options)
{
_logger = logger;
_settings = options.Value;
var client = new ServiceBusClient(_settings.ServiceBusNamespace,
new DefaultAzureCredential());
_receiver = client.CreateReceiver(_settings.InputQueueName);
_sender = client.CreateSender(_settings.OutputQueueName);
}
public async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Processor running at: {time}", DateTimeOffset.Now);
var numbers = await _receiver.ReceiveNumbersAsync(_settings.FetchCount, TimeSpan.FromMinutes(_settings.MaxWaitTime),
stoppingToken);
foreach (var n in numbers)
{
await _sender.SendMessageAsync(
new ServiceBusMessage(Fibonacci(n).ToString()), stoppingToken);
}
}
//Fibonacci method
private static int Fibonacci(int n)
{
if (n < 0) throw new ArgumentException("The number must be a positive integer", nameof(n));
return n switch
{
0 => 0,
1 => 1,
_ => Fibonacci(n - 1) + Fibonacci(n - 2)
};
}
}