`
zhang_xzhi_xjtu
  • 浏览: 535093 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Notification系统及其上的事件驱动

阅读更多
典型的Notification一般有两种架构,一种是点对点,一种是发布订阅模型。
主要讨论发布订阅模型。

主要的类如下:
Topic,可以发布的话题。包含一个Topic的元数据。
Subscription,一个消费者(可以是系统或者用户)的一个订阅,一个订阅可以订阅一个Topic,并且可以设置一些field来filter该Topic,比如只对发布与某个时间段的Topic进行订阅。
NotificationMessage,一个话题消息的实例。

Notification支持消息的异步,支持订阅者不在线时的新生成的话题消息不会丢失(即消息的可靠传输),通过把话题消息保存在db中,同时有一个守护线程发送未发送的消息,以及多线程的技术来实现。

基于这个机制可以加入EDM(Event Driven Model)。加入EMD是为了解决如下问题。

考虑一个简单的例子,有两个系统,一个user,一个chat,chat是构建在user系统之上的。
当删除一个user时,需要考虑到对chat的影响,如user在一个chat room中则不能删除user或者强制该user退出该chat room等业务逻辑。传统上这段逻辑是在user系统中的(无论是code还是通过config)。当新加一个搭建于user之上新的系统M时,删除一个user的动作对新的系统M的影响又得通过改动user系统来完成。

这种方式有如下问题:
1 系统的依赖关系是颠倒的,user作为一个底层系统反而要调用高层的系统。
2 由于1的存在,新加系统就会影响底层user系统,user系统不稳定。需要频繁更改。

本质上一个事件的产生对系统其它模块的影响应该由受影响的模块来决定,而不是相反。
如果采用Notification机制,user在删除一个用户的时候发布一个deleteUser事件,所有对该事件感兴趣的系统监听到该事件就可以做出对应的动作。这样就解决了上面的问题。

user系统一旦设计完毕,只要适当的定义user系统可以发布的事件,以后就不需要改动了。
当有新的系统加入,只需要订阅它对user的哪些事件感兴趣就可以把对应的逻辑放在自己的模块里面,而不影响user系统。

由于Notification系统是异步的,有可能引入一些时序上的问题,如删掉一个user一分钟后才把该user从一个chat room中踢掉。有必要引入同步的机制来发布订阅事件。来保证所有订阅该事件的系统先处理各自的逻辑,然后该事件才真正发生。
分享到:
评论

相关推荐

    Linux Notification chains--1

    Linux内核中的`Notification Chains`是一种机制,用于在内核的不同子系统间共享事件信息。这种机制基于发布-订阅模型,其中一个子系统(发布者)检测到事件时,会通过调用订阅者的回调函数来通知其他感兴趣的子系统...

    JDBC sql2000,2005,mysql,oracle驱动包.zip

    - `ons.jar`: Oracle Notification Service,用于发布和订阅数据库事件。 使用这些驱动包时,开发者需要在Java代码中加载对应的驱动,并创建数据库连接。例如,使用以下代码连接MySQL数据库: ```java Class.for...

    Android 底层驱动原理

    #### 一、Android系统架构及其驱动研究 **1.1 Android系统架构** Android是一个全面且高度定制化的操作系统,它为移动设备提供了一个完整的软件堆栈,包括操作系统、中间件以及关键应用。其架构自底向上分为四个...

    how to Register for Notification in ACPI - 如何注册一个ACPI 通知

    在Windows Vista及其后续版本(包括Windows Server "Longhorn")中,ACPI (Advanced Configuration and Power Interface) 驱动接口为开发人员提供了一种强大而灵活的方式来执行ACPI控制方法和处理事件。本文将深入...

    轻松解决Win732位旗舰版-未能连接一个Windows服务-问题.docx

    这个错误通常与System Event Notification Service(系统事件通知服务)有关,该服务在系统中起着至关重要的作用,负责通知系统关于硬件和软件事件。当这个服务无法正常启动或运行时,可能会导致各种系统功能出现...

    安卓系统架构

    ### 安卓系统架构概述 安卓系统的架构设计是其能够高效稳定运行的关键所在。本文将对安卓系统架构进行深入分析,旨在...对于开发者来说,理解这些层次及其相互关系是非常重要的,有助于更好地开发出高质量的应用程序。

    Android系统原理与开发要点详解_培训课件.zip

    6. **事件处理与多线程**:Android使用事件驱动模型,通过OnClickListener等接口处理用户交互。多线程用于解决长时间运行的任务,防止阻塞主线程导致的ANR(Application Not Responding)错误。 7. **数据存储**:...

    bluestacks安装不了怎么办.docx

    Bluestacks的卸载程序可能无法彻底清除所有相关组件,这时您可以借助Total Uninstaller等第三方卸载工具来完全卸载Bluestacks及其Notification Center。首先下载Total Uninstaller,然后选择BlueStacks AppPlayer和...

    BGP状态机实验1

    BGP(Border Gateway Protocol)是互联网上的一种核心路由协议,用于在不同的自治系统(AS)之间交换网络可达性信息。在这个实验中,我们将深入理解BGP状态机的设计和实现,它对于确保BGP协议的正确运行至关重要。 ...

    对于Observer的扩展研究

    Observer模式,又称为发布-订阅(Publish-Subscribe)模式或事件驱动(Event-driven)模式,是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会...

    汽车系统英文缩写大全.docx

    - **AACN**: Automatic Accident Call Notification (全自动撞车通报系统) - **ARTS**: Airbag Restraint Technology System (智能安全气囊系统) - **AWS**: After-Collision Headrest (后撞头颈保护系统) - **AIAC*...

    基于Android平台的小型物业管理系统设计.docx

    传统的基于PC端的物业管理系统虽然一定程度上提高了工作效率,但在灵活性和便捷性方面仍有不足。基于此背景,开发一款适用于移动设备的物业管理系统显得尤为重要。该系统不仅需要具备传统PC端的功能,还应充分利用...

    Android 4.1.2 源码

    Android 4.1.2 源码是一个深入理解Android操作系统内核及其组件的重要资源,对于开发者、系统定制者和安全研究者来说具有极高的价值。这个版本的Android,也被称为Jelly Bean,是Android历史上的一个关键更新,带来...

    Android系统架构详解

    下面将详细介绍这五部分的主要功能及其在系统中的作用。 #### 二、Linux Kernel Linux Kernel是Android系统的基础,提供了关键的服务和功能,如安全性、内存管理、进程管理、网络栈和驱动程序模型。这一层作为硬件...

    node-release-notification:node.js 发布通知

    Node.js 发布通知 Node.js 是一个开源、跨平台的 JavaScript 运行环境,它让开发者可以在服务器端执行 JavaScript 代码。...同时,这也是对 Node.js 生态系统及其周边工具的一个深入了解和实践的机会。

    Android系统原理及开发要点详解

    通过对这些基础知识的掌握,开发者能够更好地理解Android系统的工作机制,并在此基础上构建高质量的应用程序。随着技术的不断进步,Android开发也将面临更多新的挑战和机遇,开发者需要持续学习和探索,以适应快速...

Global site tag (gtag.js) - Google Analytics