美文网首页PHP经验分享程序员
在业务代码中植入异步通知功能

在业务代码中植入异步通知功能

作者: solohunter | 来源:发表于2018-02-24 11:57 被阅读73次

对异步通知的定位,是作为核心业务的一种补充,应该尽量与核心业务解耦。

采用的解耦方式为“事件+监听器”。一些主流的php web框架,如laravel、yii2对“事件+监听器”的支持是“开箱即用”的,只需写少量的代码(通常是增加一些配置项)即可。

这里描述的设计思想是“解耦”,是和语言无关的,属于“设计模式”的范畴。

概念

事件

业务系统在某个时机触发事件,例如订单发货了,这时需要触发一个“订单已发货”事件。事件携带了与异步通知相关的数据,如用户信息、订单信息等,这些数据用于创建异步通知任务。

监听器

监听器负责捕捉事件并创建相关的异步通知任务。

异步通知任务

异步通知任务应有以下的属性

  • 接收人
  • 通知内容
  • 发送时间
  • 发送状态

异步通知任务应带有“锁”机制,在并发场景下也可保证同一个通知不会被多次发送给用户。
异步通知的发送时间应是可配置的,以应对需求的变化。

过滤器

过滤器用于拦截不需要发送的通知。

有一种场景:用户注册后n天内不下单则发送召回通知。这种场景需要在用户注册时触发事件,监听器捕获并创建发送时间为n天后的通知任务。如果用户在n天内下单了,则这个通知就不应该发送。

这个通知对应的过滤器就应该检查从通知的创建时间到发送时间内,用户有没有下单。

实现

工厂+配置+后台进程

配置

配置包括以下内容

  • 事件对应的通知节点
  • 通知节点的发送时间

工厂

工厂的职责

  • 创建通知任务
  • 实例化通知任务

后台进程

后台进程读取待发送的通知,将通知发送给用户,并更新通知发送状态

扩展

当新需求到来时,如当用户关注的商品降价时发送一条通知,只需在业务代码中触发一个“商品降价事件”,增加相关的配置和通知节点,即可满足需求。

不足

容易看出,这种设计思想会导致业务中的事件越来越多。但为了不侵入核心业务代码,是否可以容忍这个不足之处?

相关文章

  • 在业务代码中植入异步通知功能

    对异步通知的定位,是作为核心业务的一种补充,应该尽量与核心业务解耦。 采用的解耦方式为“事件+监听器”。一些主流的...

  • springmvc异步执行业务线程

    springmvc4.3之后,添加了异步执行业务代码功能

  • 深入理解消息队列:如何实现高性能的异步网络传输?

    异步与同步模型最大的区别是,同步模型会阻塞线程等待资源,而异步模型不会阻塞线程,它是等资源准备好后,再通知业务代码...

  • SpringBoot异步使用@Async原理及线程池配置

    前言 在实际项目开发中很多业务场景需要使用异步去完成,比如消息通知,日志记录,等非常常用的都可以通过异步去执行,提...

  • Rx

    1.优点2.简洁,免除传统异步代码逻辑中的callback hell 增加业务逻辑代码的可读性subscribe订...

  • iOS开发中的小知识

    记录日常开发中遇到的小问题和小技巧,后续持续更新中...... 1 在异步线程中发送通知,那么接收此通知也在异步线...

  • 天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码?

    无论业务代码、技术代码,本身都是技术活。 通常所说的“业务代码”负责实现用户的业务功能,主要与用户、系统的功能需求...

  • Mysql优化笔记之UPDATE IN

    在项目开发中,同事在原本功能的基础上加入了新的业务操作代码后,导致业务操作经常超时。故对其代码进行调试跟踪后定位到...

  • 初识异步

    异步: 异步:自己不等结果,利用回调函数通知我结果。一般情况下,异步和回调是同时出现的。同步:自己在等结果代码展示...

  • 2018-04-01

    39. 用handler块降低代码分散程度 在异步操作中,需要用到通知,可以采用委托代理模式,或许采用块;相较于...

网友评论

    本文标题:在业务代码中植入异步通知功能

    本文链接:https://www.haomeiwen.com/subject/lxsqxftx.html