• (Dnc系列)借助Dnc.Events.InMemory在三分钟实现一个内存级别的事件驱动处理模型


    前言

    Dnc.Events是在借鉴领域驱动设计大佬daxnet的博客基础上做的基于内存级别的EDA处理模型,不清楚EDA的童鞋请自行百度。

    第一分钟 安装Nuget Dnc.Events.InMemory

    新建一个控制台项目并安装依赖

    image

    Instal-Package dnc.events.inmemory

    添加appsettings.json并设置事件存储的文件路径

    {
       "ConnectionStrings": {
         "event_store": "f://event_store.txt"
       }
    }

    注意设置:appsettings.json为较新复制或者一直复制,不然会抛出异常

    image

    第二分钟 定义一个事件和事件的处理器

    事件,依赖于基类DomainEvent

    public class TimeUpdatedEvent
          : DomainEvent
      { }

    事件处理器,继承自DomainEventHandler<>

    public class VersionSetEventHandler
             : DomainEventHandler<VersionSetEvent>
         {
             public VersionSetEventHandler(IEventStore eventStore)
                 : base(eventStore)
             { }

            protected override Task HandleAsync(VersionSetEvent @event)
             {
                 var version = @event.Version;
                 return Task.FromResult(version);
             }
         }

    第三分钟 服务注册和订阅发布

    服务注册,服务注册依赖于Dnc.Core的注册机制,事件注册服务,build构建ServiceProvider

    image

    Fx.SrvRegisteredEvent += services =>
                {
                    services.AddScoped<IEventHandler, VersionSetEventHandler>();
                };
                Fx.CreateDefaultConstruction().Build();

    使用事件总线订阅和发布事件

    var eventbus = Fx.Resolve<IEventBus>();

                 var eh = Fx.Resolve<IEventHandler>();

                 var es = Fx.Resolve<IEventStore>();

                 eventbus.Subscribe();

                 eventbus.PublishAsync(new VersionSetEvent());

    后记

    事件驱动、cqrs是领域驱动里面比较重要的概念,今天带着大家做了个简单的例子,这对于理解事件驱动的相关概念是蛮有帮助的。源码地址https://www.nuget.org/packages/Dnc.Events.InMemory/Dnc.Events.InMemory

  • 相关阅读:
    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
    E: 无法获得锁 /var/lib/apt/lists/lock
    卸载nginx
    服务器文件传输
    一些重要的sql命令
    设置某个字段的值是唯一的
    mysql注释的方法
    认证 (authentication) 和授权 (authorization) 的区别
    neutron_lib: 一个进程内的发布与订阅
    人工智能导论作业
  • 原文地址:https://www.cnblogs.com/gainorloss/p/10918766.html
Copyright © 2020-2023  润新知