-
Notifications
You must be signed in to change notification settings - Fork 1
DependencyInjection
NanoRabbit is designed as a easy-to-register library.
NanoRabbit is a Lightweight RabbitMQ .NET 3rd party library for .NET 6 and up, which is not including the management API of RabbitMQ, so you should deploy your own RabbitMQ and configure all the Users, Virtual Hosts, Exchanges, Queues before you start using NanoRabbit.
The only thing you need to do is inject NanoRabbit in Program.cs follow the below steps:
- Register RabbitProducer
- Register RabbitConsumer
- Register RabbitSubscriber
Inject RabbitProducer in Program.cs:
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddRabbitProducer(options =>
{
options.AddProducer(new ProducerOptions
{
ProducerName = "FooFirstQueueProducer",
HostName = "localhost",
Port = 5672,
UserName = "admin",
Password = "admin",
VirtualHost = "FooHost",
ExchangeName = "amq.topic",
RoutingKey = "FooFirstKey",
Type = ExchangeType.Topic,
Durable = true,
AutoDelete = false,
Arguments = null,
AutomaticRecoveryEnabled = true
});
options.AddProducer(new ProducerOptions
{
ProducerName = "BarFirstQueueProducer",
HostName = "localhost",
Port = 5672,
UserName = "admin",
Password = "admin",
VirtualHost = "BarHost",
ExchangeName = "amq.direct",
RoutingKey = "BarFirstKey",
Type = ExchangeType.Direct,
Durable = true,
AutoDelete = false,
Arguments = null,
AutomaticRecoveryEnabled = true
});
});
After injection, you can use RabbitProducer in the project, for example, create a BackgroundService, named "PublishService.cs":
public class PublishService : BackgroundService
{
private readonly RabbitProducer _producer;
public PublishService(RabbitProducer producer)
{
_producer = producer;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_producer.Publish("FooFirstQueueProducer", "Hello from conn1");
_producer.Publish("BarFirstQueueProducer", "Hello from conn2");
await Task.Delay(1000, stoppingToken);
}
}
}
Then, add this BackgroundService
at Program.cs:
builder.Services.AddHostedService<PublishService>();
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddRabbitConsumer(options =>
{
options.AddConsumer(new ConsumerOptions
{
ConsumerName = "FooFirstQueueConsumer",
HostName = "localhost",
Port = 5672,
UserName = "admin",
Password = "admin",
VirtualHost = "FooHost",
QueueName = "FooFirstQueue",
AutomaticRecoveryEnabled = true
});
options.AddConsumer(new ConsumerOptions
{
ConsumerName = "BarFirstQueueConsumer",
HostName = "localhost",
Port = 5672,
UserName = "admin",
Password = "admin",
VirtualHost = "BarHost",
QueueName = "BarFirstQueue", AutomaticRecoveryEnabled = true
});
});
After injection, you can use RabbitConsumer in the project, for example, create a BackgroundService, named "ConsumeService.cs":
public class ConsumeService : BackgroundService
{
private readonly RabbitConsumer _consumer;
public ConsumeService(RabbitConsumer consumer)
{
_consumer = consumer;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_consumer.Receive("FooFirstQueueConsumer", message => { Console.WriteLine(message); });
await Task.Delay(1000, stoppingToken);
}
}
public override Task StopAsync(CancellationToken cancellationToken)
{
return base.StartAsync(cancellationToken);
}
}
Then, add this BackgroundService
at Program.cs:
builder.Services.AddHostedService<ConsumeService>();
After adding RabbitConsumer
and inheriting RabbitSubscriber
, you should register the BackgroundService
by AddRabbitSubscriber
:
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddRabbitSubscriber<ConsumeService>("FooSecondQueueConsumer");
Since 0.1.3, inject RabbitProducer, RabbitConsumer by reading configurations from appsettings.json is available.
To use this function, you should configre the NanoRabbit Settings in appsettings.json
, here is an exmaple:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"NanoRabbit":{
"Producers":[
{
"ProducerName": "FooFirstQueueProducer",
"HostName": "localhost",
"Port": 5672,
"UserName": "admin",
"Password": "admin",
"VirtualHost": "FooHost",
"ExchangeName": "amq.topic",
"RoutingKey": "FooFirstKey",
"Type": "topic",
"AutomaticRecoveryEnabled": true,
"Durable": true,
"AutoDelete": false,
"Arguments": null
},
{
"ProducerName": "BarFirstQueueProducer",
"HostName": "localhost",
"Port": 5672,
"UserName": "admin",
"Password": "admin",
"VirtualHost": "BarHost",
"ExchangeName": "amq.direct",
"RoutingKey": "BarFirstKey",
"Type": "direct",
"AutomaticRecoveryEnabled": true,
"Durable": true,
"AutoDelete": false,
"Arguments": null
}
],
"Consumers":[
{
"ConsumerName": "FooFirstQueueConsumer",
"HostName": "localhost",
"Port": 5672,
"UserName": "admin",
"Password": "admin",
"VirtualHost": "FooHost",
"QueueName": "FooFirstQueue",
"AutomaticRecoveryEnabled": true
},
{
"ConsumerName": "BarFirstQueueConsumer",
"HostName": "localhost",
"Port": 5672,
"UserName": "admin",
"Password": "admin",
"VirtualHost": "BarHost",
"QueueName": "BarFirstQueue",
"AutomaticRecoveryEnabled": true
}
]
}
}
Then, register RabbitProducer
and RabbitConsumer
by calling AddRabbitProducerFromAppSettings
and AddRabbitConsumerFromAppSettings
.
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddRabbitProducerFromAppSettings(builder.Configuration);
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddRabbitConsumerFromAppSettings(builder.Configuration);