首页 > 其他 > 详细

思考一种好的架构(十一)

时间:2020-04-01 16:24:01      阅读:49      评论:0      收藏:0      [点我收藏+]

 

事件总线的使用

短信服务(SMS Server)

微信公众号(WeChat Server)

事件回溯服务(TracingSource)

 

短信服务:

技术分享图片

 

技术分享图片

 

 public interface ISMSOperation
    {
        void SendSMS(string message);
    }
 public class SMSOperation : ISMSOperation
    {
        public void SendSMS(string message)
        {
            Console.WriteLine($"发送短信:{message}");
        }
    }

上面就是短信自己的业务服务

它并没有引用中介者,也没把接口放在中介者,因为它有更加偏向于普通服务,虽然到最后可能也会做短信消息持久化,不过那个是NoSql的保存而不是主要业务库

 

 public class StartExecute : BaseStartExecute
    {
        public override void Execute()
        {
            EventBusPost.CreateEvent(typeof(Startup));
        }
    }
 public static class Startup
    {
        public static void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<ISMSOperation, SMSOperation>();

        }

        public static void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
         
        }
    }

 

StartExecute 留在后续再说明
这里的代码表示服务最开始启动时候就通过注入的方式通知EventBus扫描这个程序集,以便发现事件处理对象

最后来到事件(消息)处理

  class OrderGenerationEventHandler:INotificationHandler<OrderGenerationEvent>
    {
        ISMSOperation operation;
        public OrderGenerationEventHandler(ISMSOperation operation) {
            this.operation = operation;
        }
        public Task Handle(OrderGenerationEvent notification, CancellationToken cancellationToken)
        {
            operation.SendSMS($"恭喜你下单成功,下单时间:{notification.GenerationTimer},数量{notification.Number}");
            return Task.CompletedTask;
        }
    }

 

非常简单,监听订单生成事件,((OrderGenerationEvent)订单生成事件是在EventBus下定义的)

然后获取ISMSOperation 功能,Handle处理时发送短信,简单明了

 

微信公众号服务

技术分享图片

 

 

 

技术分享图片

 

 

 

现在很简单,就一个模拟发送消息的功能

它可能会需要引用到中介者服务中,对微信公众号的接入可能会导致它的服务被大量调用,但是它依旧属于普通服务,后续它可能会变得异常庞大,那那时就需要小心了,拆分的时候一定要保证服务最基本的原则

 public interface IWeChatNoticeOperation
    {
        void SendSMS(string message);
    }
 public void SendSMS(string message)
        {
            Console.WriteLine($"发送微信公众号消息:{message}");
        }

 

 public class StartExecute : BaseStartExecute
    {
        public override void Execute()
        {
            EventBusPost.CreateEvent(typeof(Startup));
        }
    }
public static class Startup
    {
        public static void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<IWeChatNoticeOperation, WeChatNoticeOperation>();
        }

        public static void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
         
        }
    }

 

class OrderGenerationEventHandler:INotificationHandler<OrderGenerationEvent>
    {
        IWeChatNoticeOperation operation;
        public OrderGenerationEventHandler(IWeChatNoticeOperation operation) {
            this.operation = operation;
        }
        public Task Handle(OrderGenerationEvent notification, CancellationToken cancellationToken)
        {
            operation.SendSMS($"恭喜你下单成功,下单时间:{notification.GenerationTimer},数量{notification.Number}");
            return Task.CompletedTask;
        }
    }

 

很简单,就是上面那一套的翻版

 

这节说了下事件总线的应用,下一节也附带了使用事件总线

 

思考一种好的架构(十一)

原文:https://www.cnblogs.com/AnAng/p/12612377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!