- An ActiveMQ istance or some other Broker with AMQP 1.0 available
- Install the nuget package
dotnet add package Devies.ActiveMQ.AMQP
- Create your
QueueOptions
- Create your queue message
- Create your task
- Call services.AddQueueReader to start consuming your queue
AddQueueReader
will add a HostedService to consume the queue in the background
appsettings.Development.json
{
"Settings": {
"Url": "amqp.org",
"Port": "5672",
"User": "username",
"Pass": "password",
"ReceiverName": "Service",
"Queue": "APP.TEST.QUEUE.TEST"
}
}
public class QueueMessage
{
public string Identifier { get; set; }
}
public class QueueTask : BaseQueueTask<QueueMessage>
{
public QueueTask(IServiceProvider serviceProvider)
: base(serviceProvider)
{
}
public override async Task<MessageAction> Execute(IServiceProvider serviceProvider,
QueueMessage message)
{
Console.WriteLine(message.Identifier);
return MessageAction.ACCEPT;
}
}
public void ConfigureServices(IServiceCollection services)
{
var queueOptions = Configuration
.GetSection("QueueOptions")
.Get<QueueOptions>();
...
services.AddQueueReader<QueueMessage, QueueTask>(queueOptions));
}
public void ConfigureServices(IServiceCollection services)
{
var queueOptions = Configuration
.GetSection("QueueOptions")
.Get<QueueOptions>();
...
services.AddSingleton<IQueueWriteService<QueueMessage>>(s =>
new WriteAMPQMQService<QueueMessage>(queueOptions));
}
public class HomeController : Controller
{
private readonly IQueueWriteService<QueueMessage> queueWriter;
public HomeController(IQueueWriteService<QueueMessage> queueWriter)
{
this.queueWriter = queueWriter;
}
[HttpGet("test")]
public async Task<IActionResult> Test()
{
await queueWriter.AddToQueue(new List<QueueMessage> {
new QueueMessage { Identifier = "123" }
});
}
}