SyZero.RabbitMQ
1.1.4-dev.1
This is a prerelease version of SyZero.RabbitMQ.
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package SyZero.RabbitMQ --version 1.1.4-dev.1
NuGet\Install-Package SyZero.RabbitMQ -Version 1.1.4-dev.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SyZero.RabbitMQ" Version="1.1.4-dev.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SyZero.RabbitMQ" Version="1.1.4-dev.1" />
<PackageReference Include="SyZero.RabbitMQ" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SyZero.RabbitMQ --version 1.1.4-dev.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SyZero.RabbitMQ, 1.1.4-dev.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SyZero.RabbitMQ@1.1.4-dev.1
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SyZero.RabbitMQ&version=1.1.4-dev.1&prerelease
#tool nuget:?package=SyZero.RabbitMQ&version=1.1.4-dev.1&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
SyZero.RabbitMQ
基于 RabbitMQ 的事件总线实现,为 SyZero 框架提供分布式消息传递能力。
功能特性
- ✅ 完整实现
IEventBus接口 - ✅ 支持事件订阅/取消订阅
- ✅ 支持动态事件处理
- ✅ 自动重连机制
- ✅ 消息持久化
- ✅ 死信队列支持
- ✅ 批量发布事件
- ✅ 消息重试策略
- ✅ 连接池管理
安装
dotnet add package SyZero.RabbitMQ
快速开始
1. 配置服务
using SyZero;
// 方式1: 代码配置
var options = new SyZero.RabbitMQ.RabbitMQEventBusOptions
{
HostName = "localhost",
Port = 5672,
UserName = "guest",
Password = "guest",
ExchangeName = "my_event_bus",
QueueNamePrefix = "my_app"
};
services.AddRabbitMQEventBus(options);
// 方式2: 从配置文件读取
services.AddRabbitMQEventBus();
// 方式3: 从配置文件读取 + 额外配置
services.AddRabbitMQEventBus(options =>
{
options.RetryCount = 5;
options.EnableDeadLetter = true;
});
// 方式4: 指定配置节名称
services.AddRabbitMQEventBus(configuration: Configuration, sectionName: "MyRabbitMQ");
2. appsettings.json 配置
{
"RabbitMQ": {
"HostName": "localhost",
"Port": 5672,
"UserName": "guest",
"Password": "guest",
"VirtualHost": "/",
"ExchangeName": "syzero_event_bus",
"ExchangeType": "topic",
"QueueNamePrefix": "syzero",
"RetryCount": 3,
"PrefetchCount": 1,
"EnableDeadLetter": true
}
}
3. 定义事件
using SyZero.EventBus;
public class OrderCreatedEvent : EventBase
{
public string OrderId { get; set; }
public decimal Amount { get; set; }
public DateTime OrderTime { get; set; }
}
4. 定义事件处理器
using SyZero.EventBus;
public class OrderCreatedEventHandler : IEventHandler<OrderCreatedEvent>
{
private readonly ILogger<OrderCreatedEventHandler> _logger;
public OrderCreatedEventHandler(ILogger<OrderCreatedEventHandler> logger)
{
_logger = logger;
}
public async Task HandleAsync(OrderCreatedEvent @event)
{
_logger.LogInformation($"处理订单创建事件: {@event.OrderId}");
// 处理业务逻辑
await Task.CompletedTask;
}
}
5. 订阅和发布事件
public class OrderService
{
private readonly IEventBus _eventBus;
public OrderService(IEventBus eventBus)
{
_eventBus = eventBus;
// 订阅事件
_eventBus.Subscribe<OrderCreatedEvent, OrderCreatedEventHandler>(
() => new OrderCreatedEventHandler(logger));
}
public async Task CreateOrderAsync(Order order)
{
// 创建订单逻辑
// 发布事件
var orderEvent = new OrderCreatedEvent
{
OrderId = order.Id,
Amount = order.Amount,
OrderTime = DateTime.Now
};
await _eventBus.PublishAsync(orderEvent);
}
}
配置选项
| 选项 | 说明 | 默认值 |
|---|---|---|
| HostName | RabbitMQ 主机地址 | localhost |
| Port | 端口号 | 5672 |
| UserName | 用户名 | guest |
| Password | 密码 | guest |
| VirtualHost | 虚拟主机 | / |
| ExchangeName | 交换机名称 | syzero_event_bus |
| ExchangeType | 交换机类型 | topic |
| QueueNamePrefix | 队列名称前缀 | syzero |
| RetryCount | 重试次数 | 3 |
| RetryIntervalMilliseconds | 重试间隔(ms) | 1000 |
| PrefetchCount | 预取数量 | 1 |
| QueueDurable | 队列持久化 | true |
| MessagePersistent | 消息持久化 | true |
| EnableDeadLetter | 启用死信队列 | true |
| MessageTTL | 消息TTL(ms) | null |
| MaxLength | 最大消息长度 | null |
高级用法
动态事件处理
public class DynamicEventHandler : IDynamicEventHandler
{
public async Task HandleAsync(string eventName, dynamic eventData)
{
Console.WriteLine($"处理动态事件: {eventName}");
Console.WriteLine($"事件数据: {eventData}");
await Task.CompletedTask;
}
}
// 订阅动态事件
_eventBus.SubscribeDynamic<DynamicEventHandler>("CustomEvent");
// 发布动态事件
await _eventBus.PublishAsync("CustomEvent", new { Data = "test" });
批量发布事件
var events = new List<EventBase>
{
new OrderCreatedEvent { OrderId = "1" },
new OrderCreatedEvent { OrderId = "2" },
new OrderCreatedEvent { OrderId = "3" }
};
await _eventBus.PublishBatchAsync(events);
最佳实践
- 连接管理:使用单例模式注册 EventBus,避免重复创建连接
- 消息持久化:生产环境建议开启消息持久化
- 死信队列:启用死信队列处理失败消息
- 预取数量:根据消费者处理能力调整 PrefetchCount
- 重试策略:合理设置重试次数和间隔
- 日志监控:关注连接状态和消息处理异常
注意事项
- RabbitMQ 服务器需要正常运行
- 确保网络连接稳定
- 消息序列化使用 System.Text.Json
- 支持自动重连和故障恢复
- 依赖 Polly 库实现重试策略
依赖项
- RabbitMQ.Client >= 6.8.1
- Microsoft.Extensions.DependencyInjection.Abstractions >= 8.0.0
- Microsoft.Extensions.Logging.Abstractions >= 8.0.0
- Polly >= 8.0.0
许可证
MIT License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.1
- Polly (>= 8.5.0)
- RabbitMQ.Client (>= 6.8.1)
- SyZero (>= 1.1.4-dev.1)
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 |
|---|---|---|
| 1.1.5-dev.1 | 23 | 1/29/2026 |
| 1.1.4 | 95 | 1/2/2026 |
| 1.1.4-dev.2 | 42 | 1/2/2026 |
| 1.1.4-dev.1 | 43 | 12/30/2025 |
| 1.1.3 | 95 | 12/30/2025 |
| 1.1.3-dev.6 | 45 | 12/30/2025 |
| 1.1.3-dev.3 | 114 | 1/19/2024 |
| 1.1.3-dev.2 | 169 | 11/3/2023 |
| 1.1.3-dev.1 | 189 | 3/21/2023 |
| 1.1.2 | 361 | 3/15/2023 |
| 1.1.2-dev.108.29344 | 186 | 3/15/2023 |
| 1.1.2-dev.108.28054 | 182 | 3/15/2023 |
| 1.1.2-dev.108.27487 | 178 | 3/15/2023 |
| 1.1.1 | 334 | 3/15/2023 |
| 1.1.1-dev.108.14980 | 178 | 3/15/2023 |
| 1.1.1-dev.108.13289 | 183 | 3/15/2023 |
| 1.1.1-dev.107.27144 | 177 | 3/14/2023 |
| 1.1.0 | 340 | 3/14/2023 |
| 1.1.0-workflow-dev.107.22552 | 185 | 3/14/2023 |
| 1.1.0-workflow-dev.107.21746 | 177 | 3/14/2023 |
| 1.1.0-workflow-dev.107.21506 | 178 | 3/14/2023 |
| 1.1.0-workflow-dev.107.20979 | 184 | 3/14/2023 |
| 1.1.0-dev.107.26364 | 180 | 3/14/2023 |
| 1.1.0-dev.107.24396 | 172 | 3/14/2023 |
| 1.1.0-dev.107.22787 | 186 | 3/14/2023 |
| 1.0.6 | 418 | 3/5/2022 |