结合上篇 EasyEventBus(事件总线)与mq的使用
1 安装EasyEventBus
dotnet add package EasyCore.EventBus --version 8.0.1

dotnet add package EasyCore.EventBus.RabbitMQ --version 8.0.0

2 注入服务
// 🎯 注册 EventBus 服务builder.Services.EasyCoreEventBus(options =>
{
//方式二:如果需要自定义配置(非 localhost 或需要指定用户名密码)
options.RabbitMQ(opt =>
{
opt.HostName = "localhost";
opt.UserName = "admin";
opt.Password = "admin123";
opt.Port = 5672;
});
});
3 创建消息的传递内容
///
/// 订单的测试事件传值内容
///
public class OrderCreatedEvent : IEvent
{
///
/// 订单id
///
public int OrderId { get; set; }
///
/// 产品名称
///
public string ProductName { get; set; }
///
/// 金额
///
public decimal Amount { get; set; }
}

4 通过api创建生产者
[Route("api/[controller]/[action]")]
[ApiController]
[ApiExplorerSettings(GroupName = nameof(ApiVersionInfo.Wcs))]
public class OrdersController : ControllerBase
{
private readonly IDistributedEventBus _eventBus;
///
///
///
///
public OrdersController(IDistributedEventBus eventBus)
{
_eventBus = eventBus;
}
///
/// 创建订单
///
///
[HttpPost]
public async Task
{
// 创建事件对象
var orderEvent = new OrderCreatedEvent
{
OrderId = new Random().Next(1, 1000),
ProductName = "Laptop",
Amount = 5999.99m
};
// 发布事件
await _eventBus.PublishAsync(orderEvent);
return Ok("订单已创建,事件已发布");
}
}

5 创建消费者
// 处理 OrderCreatedEvent 的消费者
public class OrderCreatedEventHandler : IDistributedEventHandler
{
private readonly ILogger
public OrderCreatedEventHandler(ILogger
{
_logger = logger;
}
public async Task HandleAsync(OrderCreatedEvent eventMessage)
{
// 这里编写收到事件后的处理逻辑
// 例如:发送邮件、更新库存、记录日志等
_logger.LogInformation($"📨 收到订单创建事件: 订单 {eventMessage.OrderId}, 商品 {eventMessage.ProductName}, 金额 {eventMessage.Amount}");
// 模拟异步处理
await Task.Delay(10);
}
}

6 启动程序 测试结果

7 检查mq中是否产生队列。以及消息

结束

浙公网安备 33010602011771号