agilelabs-fx-docs main features/memory-bus.md

内存消息总线 (MemoryBus)

AgileLabs.MemoryBuses 提供简单的内存级消息总线,适用于单进程内的事件发布/订阅。特点:

  • 基于 Task.Factory.StartNew 支持异步消费,长任务可设置为 LongRunning
  • 结合 WorkContext,在异步任务中自动创建新的 IServiceScopeIWorkContext
  • 支持共享当前 WorkContext,适合事务内的同步事件。

注册

services.AddMemoryBus();

调用后会注册:

  • IMemoryBusMemoryBus
  • IEventHandlerMappingCacheManager
  • IEventConsumer(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 会抛异常。

注意事项

  1. 异常处理:异步任务中捕获异常并写日志,避免吞掉错误。
  2. 性能:适合单进程场景;跨进程通信仍需要 RabbitMQ 等队列。
  3. 事务一致性:如果需要与数据库事务绑定,可在 isShareWorkContext=true 且事务完成后发送。

延伸阅读: