结合上篇 EasyEventBus(事件总线)与mq的使用

1 安装EasyEventBus
dotnet add package EasyCore.EventBus --version 8.0.1
image
dotnet add package EasyCore.EventBus.RabbitMQ --version 8.0.0
image
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; }
}
image
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 CreateOrder()
{
// 创建事件对象
var orderEvent = new OrderCreatedEvent
{
OrderId = new Random().Next(1, 1000),
ProductName = "Laptop",
Amount = 5999.99m
};

// 发布事件
await _eventBus.PublishAsync(orderEvent);

return Ok("订单已创建,事件已发布");
}
}
image
5 创建消费者
// 处理 OrderCreatedEvent 的消费者
public class OrderCreatedEventHandler : IDistributedEventHandler
{
private readonly ILogger _logger;

public OrderCreatedEventHandler(ILogger logger)
{
_logger = logger;
}

public async Task HandleAsync(OrderCreatedEvent eventMessage)
{
// 这里编写收到事件后的处理逻辑
// 例如:发送邮件、更新库存、记录日志等
_logger.LogInformation($"📨 收到订单创建事件: 订单 {eventMessage.OrderId}, 商品 {eventMessage.ProductName}, 金额 {eventMessage.Amount}");

// 模拟异步处理
await Task.Delay(10);
}
}
image

6 启动程序 测试结果
image
7 检查mq中是否产生队列。以及消息
image
结束

posted @ 2026-07-08 14:57  btn_Load  阅读(1)  评论(0)    收藏  举报