EzRabbitMQ 0.1.2-beta003
See the version list below for details.
dotnet add package EzRabbitMQ --version 0.1.2-beta003
NuGet\Install-Package EzRabbitMQ -Version 0.1.2-beta003
<PackageReference Include="EzRabbitMQ" Version="0.1.2-beta003" />
paket add EzRabbitMQ --version 0.1.2-beta003
#r "nuget: EzRabbitMQ, 0.1.2-beta003"
// Install EzRabbitMQ as a Cake Addin #addin nuget:?package=EzRabbitMQ&version=0.1.2-beta003&prerelease // Install EzRabbitMQ as a Cake Tool #tool nuget:?package=EzRabbitMQ&version=0.1.2-beta003&prerelease
EzRabbitMQ
Library for .Net Core 5 simplifying the usage of rabbitMQ.
Features :
Optional AppInsight consumer/ message / producer tracing.
Error handling with optional retry count.
PollyRetryPolicies on rabbitMQ calls for client resiliency.
Usage
Register services :
services.AddEzRabbitMQ(config); // IConfiguration
Configuration
In AppSettings.json file:
{
"EzRabbitMQ": {
"HostName": "localhost",
"UserName": "guest",
"Password": "guest",
"Port": 5672
}
}
Or using environment variables :
// linux example
export EzRabbitMQ__HostName="localhost"
// powershell example
$env:EzRabbitMQ__HostName="localhost"
Send direct message
IProducerService producerService; // use injection to get a IProducerService
producerService.Send(new DirectProducerOptions("ROUTING KEY"), new { Example = 123 });
Send topic message
IProducerService producerService; // use injection to get a IProducerService
producerService.Send(new TopicProducerOptions("TOPIC.SUBTOPIC.*"), new { Example = 123 });
Send fanout message
IProducerService producerService; // use injection to get a IProducerService
producerService.Send(new FanoutProducerOptions(), new { Example = 123 });
Send headers message
IProducerService producerService; // use injection to get a IProducerService
var headerProducer = new HeadersProducerOptions(new()
{
{ "file-type", "jpg" },
{ "theme", "wild" }
});
producerService.Send(headerProducer, new { Example = 123 });
Listen messages using events
You can create EventMailbox mailbox instance and react to messages with the OnMessageReceived event.
// use injection to get a IMailboxService
var mailboxOptions = new DirectMailboxOptions("ROUTING KEY", "MAILBOX NAME");
var mailbox = mailboxService.Create<EventMailbox<DataSample>>(mailboxOptions, new ConsumerOptions());
mailbox.OnMessageReceived += (sender, data) => {
// data is IMessage<DataSample>
};
Listen direct messages
// use injection to get a IMailboxService
var mailboxOptions = new DirectMailboxOptions("ROUTING KEY", "MAILBOX NAME");
var mailbox = mailboxService.Create<EventMailbox<DataSample>>(mailboxOptions, new ConsumerOptions());
Listen topic messages
// use injection to get a IMailboxService
var mailboxOptions = new TopicMailboxOptions("ROOT.SECTOR-A.*", "MAILBOX NAME");
var mailbox = mailboxService.Create<EventMailbox<DataSample>>(mailboxOptions, new ConsumerOptions());
Listen fanout messages
// use injection to get a IMailboxService
var mailboxOptions = new FanoutMailboxOptions("MAILBOX NAME");
var mailbox = mailboxService.Create<EventMailbox<DataSample>>(mailboxOptions, new ConsumerOptions());
Listen headers messages
// use injection to get a IMailboxService
var converterToGifMailboxOptions = new HeadersMailboxOptions(new()
{
{ "type", "jpg" },
{ "type", "png" }
}, XMatch.Any, "converter-to-gif");
var converterToGifMailbox = mailboxService.Create<EventMailbox<DataSample>>(converterToGifMailboxOptions, new ConsumerOptions());
var thumbnailCreatorMailboxOptions = new HeadersMailboxOptions(new()
{
{ "type", "gif" },
{ "target", "avatar" }
}, XMatch.All, "thumbnail-creator");
var thumbnailCreatorMailbox = mailboxService.Create<EventMailbox<DataSample>>(thumbnailCreatorMailboxOptions, new ConsumerOptions());
Listen messages using implementation
Or you can implement your own Mailbox inheriting Mailbox<T>, you will have to implement the OnMessage method.
public class MyMailbox<T> : Mailbox<T>
{
public EventMailbox(
ILogger<MyMailbox<T>> logger,
IMailboxOptions options,
ISessionService session,
ConsumerOptions consumerOptions
) : base(logger, options, null, session, consumerOptions) { }
protected override void OnMessage(IMessage<T> data)
{
// react to message
}
}
// use injection to get a IMailboxService
var options = ConsumerOptions.CreateDefaultOptions;
var mailboxOptions = new DirectMailboxOptions("ROUTINg KEY", "MAILBOX NAME");
var mailbox = mailboxService.Create<MyMailbox<DataSample>>(mailboxOptions, options);
ConsumerOptions
This options can add rabbitMQ arguments to enable / disable features.
ConsumerOptions default values:
RetryCount:
You can enable retry on consumer exception by using the consumerOptions object :
var options = new ConsumerOptions
{
AutoAck = false, // AutoAck must be false to use RetryCount
RetryCount = 3, // After 3 retry exception in the message will be reject,
};
Durable Queue :
To create a durable queue persistant after server restart :
var options = new ConsumerOptions
{
QueueDurable = true, // set durable feature on queue (need queue recreation if changed)
QueueAutoDelete = false. // set auto delete feature on queue (need queue recreation if changed)
};
Durable Exchange :
To create a durable exchange persistant after server restart :
var options = new ConsumerOptions
{
ExchangeDurable = true, // set durable feature on queue (need queue recreation if changed)
ExchangeAutoDelete = false. // set auto delete feature on queue (need queue recreation if changed)
};
Exclusive Queue
To allow only one consumer you can enable the Exclusive feature of the queue :
var options = new ConsumerOptions
{
QueueExclusive = true, // set exclusive feature on queue (need queue recreation if changed)
};
Limits
To set the prefetch message count limit :
var options = new ConsumerOptions
{
PrefetchCount = 10, // set the prefetch amount of message read by this consumer
PrefetchGlobal = false // channel global or by consumer limit
};
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net5.0
- Microsoft.ApplicationInsights.WorkerService (>= 2.18.0)
- Microsoft.Extensions.Configuration.Binder (>= 5.0.0)
- Microsoft.Extensions.Hosting (>= 5.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 5.0.0)
- Microsoft.Extensions.Logging (>= 5.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 5.0.0)
- Polly (>= 7.2.2)
- RabbitMQ.Client (>= 6.2.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
6.4.4 | 520 | 11/25/2023 | |
6.4.2 | 405 | 11/25/2023 | |
6.4.1 | 383 | 11/24/2023 | |
6.4.0 | 852 | 9/11/2022 | |
6.3.1 | 846 | 9/11/2022 | |
6.3.0 | 820 | 9/11/2022 | |
6.2.2.8 | 738 | 1/5/2022 | |
6.2.2.7 | 734 | 12/14/2021 | |
6.2.2.6 | 713 | 12/10/2021 | |
6.2.2.5 | 913 | 12/9/2021 | |
6.2.2.4 | 730 | 12/9/2021 | |
6.2.2.2 | 747 | 12/9/2021 | |
6.2.2.2-alpha | 596 | 12/5/2021 | |
6.2.2.1-alpha | 695 | 10/30/2021 | |
6.2.2-alpha | 640 | 10/28/2021 | |
0.2.0-beta002 | 638 | 10/25/2021 | |
0.2.0-beta001 | 682 | 10/25/2021 | |
0.2.0-alpha | 634 | 10/26/2021 | |
0.1.2 | 1,139 | 10/4/2021 | |
0.1.2-beta003 | 769 | 10/17/2021 | |
0.1.2-beta002 | 811 | 10/17/2021 | |
0.1.2-beta001 | 846 | 10/10/2021 | |
0.1.1 | 1,108 | 10/2/2021 | |
0.1.0 | 1,113 | 10/2/2021 | |
0.0.2-beta-3 | 756 | 9/26/2021 | |
0.0.2-beta-2 | 753 | 9/26/2021 | |
0.0.2-beta | 723 | 9/26/2021 | |
0.0.1 | 1,050 | 9/26/2021 |