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.
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" />
                    
Directory.Packages.props
<PackageReference Include="SyZero.RabbitMQ" />
                    
Project file
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
                    
#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
                    
Install as a Cake Addin
#tool nuget:?package=SyZero.RabbitMQ&version=1.1.4-dev.1&prerelease
                    
Install as a Cake Tool

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);

最佳实践

  1. 连接管理:使用单例模式注册 EventBus,避免重复创建连接
  2. 消息持久化:生产环境建议开启消息持久化
  3. 死信队列:启用死信队列处理失败消息
  4. 预取数量:根据消费者处理能力调整 PrefetchCount
  5. 重试策略:合理设置重试次数和间隔
  6. 日志监控:关注连接状态和消息处理异常

注意事项

  • 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 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.

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