.NET Core MediatR訂閱發布


前言

上一章主要通過MediatR進行職責分離,本章將通過MediatR使用訂閱發布

  • Publish 此方法會將消息發布到內存隊列,如果有任何訂閱者訂閱,此消息自行處理業務.

在我們開發中可能會存在一個場景,當我添加完某條數據或者說當我執行完一些操作后我需要進行發個郵件通知或者短信通知等等.

Notification

OrderCreatedEvent
所有的事件都需要繼承INotification接口

   public class OrderCreatedEvent: INotification
    {
        public string UserId { get; set; }

        public OrderCreatedEvent(string orderId)
        {
            this.UserId = orderId;
        }
    }

OrderCreatedDomainEventHandler在這其實可以進行實現廣播也就是實現多消費者去訂閱.所有消息處理器都需要繼承INotificationHandler接口

   public class OrderCreatedDomainEventHandler :
        INotificationHandler<OrderCreatedEvent>
    {
        private readonly ILogger _logger;

        public OrderCreatedDomainEventHandler(ILogger<OrderCreatedDomainEventHandler> logger)
        {
            _logger = logger;
        }

        public Task Handle(OrderCreatedEvent notification, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Order has found by userid id: {notification.UserId} from publisher");
            return Task.CompletedTask;
        }
    }

CreateOrderCommandHandler 通過我們的訂單處理器創建完訂單,通過Mediator進行發布消息

    public class CreateOrderCommandHandler
        : IRequestHandler<CreateOrderRequestModel, string>
    {
        private readonly IMediator _mediator;

        public CreateOrderCommandHandler(IMediator mediator)
        {
            this._mediator = mediator;
        }

        public async Task<string> Handle(CreateOrderRequestModel request, CancellationToken cancellationToken)
        {
            //do something...
            await _mediator.Publish(new OrderCreatedEvent(request.UserId), cancellationToken);
            return request.UserId;
        }
    }

Reference

https://github.com/hueifeng/BlogSample/tree/master/src/CQRSMediatR


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM