Post

领域事件和集成事件

领域事件(Domain Event) 是 DDD 中的概念. 是指在领域内部, 用来彼此同步状态的事件. 集成事件(Integration Event) 是微服务中的概念, 是指不同的微服务之间进行通信的载体.

这里以微软文档中的DDD示例程序eShop为例. 该案例中, Ordering 即订单部分采用了DDD的架构.

Ordering.Domain中定义了领域模型, 其中包括两个聚合根(订单Order 买家Buyer). 两个聚合根都定义了一些基本的操作方法, 例如订单根就有创建订单, 更改订单状态, 取消订单等等. 这些方法在更改实体模型的同时, 会创建一个 领域事件 并添加到领域模型的事件列表中. 在Ordering.Domain.SeedWork.IUnitOfWork中可以看到”工作单元”的接口定义, 包含SaveEntitiesAsync方法, 用来将实体模型同步到数据库. 找到该方法的实现:

await _mediator.DispatchDomainEventsAsync(this);
_ = await base.SaveChangesAsync(cancellationToken);

第一句就是发布领域事件. 第二句用来保存实体的更改.

Ordering.API.Application.IntegrationEvent定义了集成事件以及对应的触发方法. 这些集成方法的触发是由服务于整个应用的事件队列中间件来管理的(这里是RabbitMQ). 而这个目录的handle是本微服务订阅的事件的处理程序, 事件的声明则是所有可能会创建的事件.

不用DDD的微服务应用, 也会有集成事件, 但只有DDD的应用, 才有领域事件的概念.

This post is licensed under CC BY 4.0 by the author.