zoukankan      html  css  js  c++  java
  • .NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(下)

    33 | 集成事件:使用RabbitMQ来实现EventBus

    为了演示我们的发布和订阅的话,我们在这里的代码做一些稍微的调整

    namespace GeekTime.API.Application.DomainEventHandlers
    {
        public class OrderCreatedDomainEventHandler : IDomainEventHandler<OrderCreatedDomainEvent>
        {
            ICapPublisher _capPublisher;
            public OrderCreatedDomainEventHandler(ICapPublisher capPublisher)
            {
                _capPublisher = capPublisher;
            }
    
            public async Task Handle(OrderCreatedDomainEvent notification, CancellationToken cancellationToken)
            {
                await _capPublisher.PublishAsync("OrderCreated", new OrderCreatedIntegrationEvent(notification.Order.Id));
            }
        }
    }
    

    这里我们发布了一个 OrderCreated 的集成事件,然后订阅一个 OrderCreated

    namespace GeekTime.API.Application.IntegrationEvents
    {
        public class SubscriberService : ISubscriberService, ICapSubscribe
        {
            IMediator _mediator;
            public SubscriberService(IMediator mediator)
            {
                _mediator = mediator;
            }
    
    
            [CapSubscribe("OrderPaymentSucceeded")]
            public void OrderPaymentSucceeded(OrderPaymentSucceededIntegrationEvent @event)
            {
                //Do SomeThing
            }
    
            [CapSubscribe("OrderCreated")]
            public void OrderCreated(OrderCreatedIntegrationEvent @event)
            {
                //Do SomeThing
            }
        }
    }
    

    通过标注属性,我们就可以完成订阅

    也就是说我们创建一个订单的时,我们会触发订单创建的领域事件,订单创建的领域事件又发送了一个订单创建的集成事件,然后我们在订阅服务里面订阅了订单创建的集成事件

    在发布和订阅的地方分别打上一个断点,启动程序,可以看到整个流程

    我们再梳理一下整个流程,首先我们创建了一个订单,这个订单触发了我们的 OrderCreated 的领域事件,OrderCreated 的领域事件的处理器像我们的 EventBus 发布了一个 OrderCreated 的集成事件,我们在订阅服务的地方订阅了这个事件,所以我们可以接收到并且做出相应的处理

    我们观察一下数据库的表,一共有四张表,cap.publish 和 cap.received 这两张表分别对应发送事件表和接收事件表,order 和 user 这两张表是我们的领域模型表

    整个 CAP 的框架,它的实现原理其实有两个关键点,一个是事件表,一个就是事务控制,也就是说将事件的存储嵌入到我们的业务逻辑的事务里面去,这样子我们就可以保证我们的业务与事件是要么都能存储成功,要么都失败

    整个 CAP 框架它的应用性是非常强的,非常建议在处理集成事件的时候使用这个框架

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

  • 相关阅读:
    SytemC on CentOS 5.3 64bit
    Fast Poisson Disk Sampling
    Geometry Imager Viewport Filter
    Dinornis – Rendering your Model in Mudbox by RenderMan Directly !
    Models of biological pattern formation
    OrthoLab
    如何编译ATILA GPU Emulator
    感受谷歌地图
    树状列表完成
    获取地图标记点经纬度
  • 原文地址:https://www.cnblogs.com/MingsonZheng/p/12584854.html
Copyright © 2011-2022 走看看