内存消息总线 (MemoryBus)
AgileLabs.MemoryBuses 提供简单的内存级消息总线,适用于单进程内的事件发布/订阅。特点:
- 基于
Task.Factory.StartNew支持异步消费,长任务可设置为LongRunning。 - 结合 WorkContext,在异步任务中自动创建新的
IServiceScope与IWorkContext。 - 支持共享当前 WorkContext,适合事务内的同步事件。
注册
services.AddMemoryBus();
调用后会注册:
IMemoryBus→MemoryBusIEventHandlerMappingCacheManagerIEventConsumer(Scoped,MemoryEventConsumer)
发送事件
await _memoryBus.SendAsync(new UserCreatedEvent
{
UserId = id
});
默认会序列化事件并交由 MemoryEventConsumer 查找订阅者:
public class UserCreatedEventConsumer : IEventSubscriber<UserCreatedEvent>
{
public async Task Handle(UserCreatedEvent message)
{
// todo
}
}
关键参数
| 参数 | 说明 |
|---|---|
optionalHeaders |
预留扩展,用于传递额外元数据。 |
isLongTimeMessage |
true 时使用 TaskCreationOptions.LongRunning,适合耗时任务。 |
isShareWorkContext |
true 时复用当前 WorkContext,同步触发器。若当前不存在 WorkContext 会抛异常。 |
注意事项
- 异常处理:异步任务中捕获异常并写日志,避免吞掉错误。
- 性能:适合单进程场景;跨进程通信仍需要 RabbitMQ 等队列。
- 事务一致性:如果需要与数据库事务绑定,可在
isShareWorkContext=true且事务完成后发送。
延伸阅读: