CN104360904A - 基于事件总线的模块间消息传递机制 - Google Patents
基于事件总线的模块间消息传递机制 Download PDFInfo
- Publication number
- CN104360904A CN104360904A CN201410551054.7A CN201410551054A CN104360904A CN 104360904 A CN104360904 A CN 104360904A CN 201410551054 A CN201410551054 A CN 201410551054A CN 104360904 A CN104360904 A CN 104360904A
- Authority
- CN
- China
- Prior art keywords
- event
- subscriber
- function
- thread
- bus
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及编程技术,特别涉及一种不同功能模块间的消息传递方法,目的是为了解决现有软件编程过程中模块间耦合严重的问题。本发明提供一种基于事件总线的模块间消息传递机制,包括如下步骤:首先,在订阅者类中实现各种事件的订阅函数并进行标注,订阅者向事件总线注册事件。其次,事件总线进行事件注册后,通过反射机制找出注册对象中被标注的订阅函数,生成订阅者对象。然后,以订阅事件为key,用map来维护订阅者信息,所述订阅者信息包括订阅者对象、回调事件函数及事件类型。最后,通过反射机制分析订阅者对象,根据回调事件函数回调的Method名字确定事件执行方式并遍历map进行事件分发。本发明适用于编程领域。
Description
技术领域
本发明涉及编程技术,特别涉及一种不同功能模块间的消息传递方法。
背景技术
在应用开发过程中,我们总会遇到各个组件模块之间的通信,随着应用功能的增加,需要监听的事件越来越多,越来越多的模块需要监听不同的事件,导致大量的模块需要注册到各事件管理器上,从而出现各模块间耦合严重。代码不易维护和测试,甚至在出现一些bug的时候,会无从入手。
软件产品的终极目标是松耦合,模块之间应该尽量减少耦合度,不要违背软件工程中“高内聚,低耦合”的原则。很多技术的出现都是为解决耦合问题,比如IoC、AOP、SOA、观察者模式、面向接口编程、MVC、事件驱动架构(Event-Driven Architecture)等方法。
发明内容
本发明的目的是为了解决现有软件编程过程中模块间耦合严重的问题。
本发明提供一种基于事件总线的模块间消息传递机制,包括如下步骤:
A.在订阅者类中实现各种事件的订阅函数并进行标注,订阅者向事件总线注册事件;
B.事件总线进行事件注册后,通过反射机制找出注册对象中被标注的订阅函数,生成订阅者对象;
C.以订阅事件为key,用map来维护订阅者信息,所述订阅者信息包括订阅者对象、回调事件函数及事件类型;
D.通过反射机制分析订阅者对象,根据回调事件函数回调的Method名字确定事件执行方式并遍历map进行事件分发。
具体地,步骤D中事件执行方式包括:
PostThread:直接调用订阅对象的回调函数;
MainThread:UI线程的Handler,PendingPostQueue来维护一个事件列表,SendMessage方式发送消息到UI Looper,设定超时机制,如果事件处理超时,会将后续的事件重新发送一次,防止阻塞UI线程;
Async:实现Runnable接口,维护一个PendingPostQueue事件队列,执行在事件总线创建的线程池中;
BackgroundThread:判断当前线程是否是主线程,如果是,执行方式与PostThread一致,如果当前线程不是主线程,则维护一个PendPostQueue事件队列,并执行在事件总线创建的线程池中。
优选地,步骤A中以Subscribe标注订阅函数。
具体地,所述反射机制为java反射机制。
本发明的有益效果是:本发明基于对Publish/Subscribe模式的改进优化,提出事件总线概念,减少创建复杂的类和接口层次结构使用以增强代码的健壮性和可靠性。
具体实施方式
本发明针对现有软件编程过程中模块间耦合严重的问题,提出一种基于事件总线的模块间消息传递机制,包括如下步骤:
A.在订阅者类中实现各种事件的订阅函数并进行标注,订阅者向事件总线注册事件;
B.事件总线进行事件注册后,通过反射机制找出注册对象中被标注的订阅函数,生成订阅者对象;
C.以订阅事件为key,用map来维护订阅者信息,所述订阅者信息包括订阅者对象、回调事件函数及事件类型;
D.通过反射机制分析订阅者对象,根据回调事件函数回调的Method名字确定事件执行方式并遍历map进行事件分发。
事件总线存在如下技术特点:
1、利用java反射机制实现订阅事件函数基于注解(annotation)。
2、事件响应有多线程选择,具体包括如下几种方式:
PostThread:事件响应函数和事件发布在同一线程中执行,这样可以避免线程切换。
MainThread:事件响应函数会在主线程(UI线程)中执行。
BackgroundThread:事件响应函数会在一个后台线程中执行。如果事件发布函数不是在主线程中,则会立即在事件发布线程中执行响应函数。如果事件发布函数在主线程中,事件总线则会在唯一的一个后台线程中按照顺序来执行所有的后台事件响应函数。
Async:事件响应函数在另外一个异步线程中执行。该线程和发布线程、主线程相互独立。处理事件响应函数需要较长的时间来执行。
BackgroundThread:判断当前线程是否是主线程,如果是,执行方式与PostThread一致,如果当前线程不是主线程,则维护一个PendPostQueue事件队列,并执行在事件总线创建的线程池中。
Claims (4)
1.基于事件总线的模块间消息传递机制,其特征在于,包括如下步骤:
A.在订阅者类中实现各种事件的订阅函数并进行标注,订阅者向事件总线注册事件;
B.事件总线进行事件注册后,通过反射机制找出注册对象中被标注的订阅函数,生成订阅者对象;
C.以订阅事件为key,用map来维护订阅者信息,所述订阅者信息包括订阅者对象、回调事件函数及事件类型;
D.通过反射机制分析订阅者对象,根据回调事件函数回调的Method名字确定事件执行方式并遍历map进行事件分发。
2.如权利要求1所述的基于事件总线的模块间消息传递机制,其特征在于,步骤D中事件执行方式包括:
PostThread:直接调用订阅对象的回调函数;
MainThread:UI线程的Handler,PendingPostQueue来维护一个事件列表,SendMessage方式发送消息到UI Looper,设定超时机制,如果事件处理超时,会将后续的事件重新发送一次,防止阻塞UI线程;
Async:实现Runnable接口,维护一个PendingPostQueue事件队列,执行在事件总线创建的线程池中;
BackgroundThread:判断当前线程是否是主线程,如果是,执行方式与PostThread一致,如果当前线程不是主线程,则维护一个PendPostQueue事件队列,并执行在事件总线创建的线程池中。
3.如权利要求1所述的基于事件总线的模块间消息传递机制,其特征在于,步骤A中以Subscribe标注订阅函数。
4.如权利要求1所述的基于事件总线的模块间消息传递机制,其特征在于,所述反射机制为java反射机制。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410551054.7A CN104360904A (zh) | 2014-10-16 | 2014-10-16 | 基于事件总线的模块间消息传递机制 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410551054.7A CN104360904A (zh) | 2014-10-16 | 2014-10-16 | 基于事件总线的模块间消息传递机制 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104360904A true CN104360904A (zh) | 2015-02-18 |
Family
ID=52528168
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410551054.7A Pending CN104360904A (zh) | 2014-10-16 | 2014-10-16 | 基于事件总线的模块间消息传递机制 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104360904A (zh) |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105404556A (zh) * | 2015-10-22 | 2016-03-16 | 江苏省电力公司扬州供电公司 | 基于l-qt-p多线程事件触发机制的通信系统及方法 |
CN106162166A (zh) * | 2015-03-23 | 2016-11-23 | Tcl集团股份有限公司 | 一种工厂遥控器按键事件处理方法和装置 |
CN106250229A (zh) * | 2016-08-16 | 2016-12-21 | 东软集团股份有限公司 | 事件处理的方法及装置 |
CN106598751A (zh) * | 2016-10-31 | 2017-04-26 | 武汉斗鱼网络科技有限公司 | 通过事件总线分发事件的方法及系统 |
CN107038076A (zh) * | 2016-10-25 | 2017-08-11 | 努比亚技术有限公司 | 组件系统及组件交互方法 |
CN107220129A (zh) * | 2017-04-14 | 2017-09-29 | 武汉斗鱼网络科技有限公司 | 一种软件模块间的通信方法和系统 |
CN107239275A (zh) * | 2017-05-17 | 2017-10-10 | 努比亚技术有限公司 | 应用运行方法、终端及计算机可读存储介质 |
CN108255545A (zh) * | 2016-12-28 | 2018-07-06 | 阿里巴巴集团控股有限公司 | 组件间的功能调用方法、装置及组件化架构系统 |
CN108920358A (zh) * | 2018-06-05 | 2018-11-30 | 东软集团股份有限公司 | 消息总线的路由表生成方法、装置、存储介质及电子设备 |
CN108958717A (zh) * | 2018-06-28 | 2018-12-07 | 深圳数字动能信息技术有限公司 | C++事件总线实现方法 |
CN109101340A (zh) * | 2018-09-18 | 2018-12-28 | 武汉斗鱼网络科技有限公司 | 弹幕消息的动态分发方法、装置、设备和存储介质 |
CN109284098A (zh) * | 2018-09-25 | 2019-01-29 | 四川长虹电器股份有限公司 | 基于RxJava构建事件总线RxBus的方法 |
CN110018910A (zh) * | 2018-01-08 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 事件总线的注册模板实现方法、存储介质、设备及系统 |
CN110659033A (zh) * | 2018-06-29 | 2020-01-07 | 武汉斗鱼网络科技有限公司 | 协议注册分发方法、存储介质、电子设备及系统 |
CN110688203A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN110895848A (zh) * | 2018-09-13 | 2020-03-20 | 北京怡合春天科技有限公司 | 一种基于事件总线的智能排队模式及系统 |
CN111581827A (zh) * | 2020-05-09 | 2020-08-25 | 中国人民解放军海军航空大学 | 一种面向分布式仿真的事件交互方法及系统 |
CN112084044A (zh) * | 2020-08-27 | 2020-12-15 | 腾讯科技(深圳)有限公司 | 系统中事件处理方法及相关装置 |
CN112379979A (zh) * | 2020-10-27 | 2021-02-19 | 航天信息股份有限公司 | 一种应用于税控服务的线程超时监控方法 |
CN112860529A (zh) * | 2019-11-28 | 2021-05-28 | 瑞昱半导体股份有限公司 | 通用分析装置与方法 |
CN113051511A (zh) * | 2021-03-08 | 2021-06-29 | 北京百度网讯科技有限公司 | 页面消息分发方法、装置、设备和存储介质 |
CN113626219A (zh) * | 2021-08-06 | 2021-11-09 | 湖南大学 | 一种基于注册回调机制的线程间数据分发方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002052414A1 (fr) * | 2000-12-22 | 2002-07-04 | Wany Sa | Architecture electronique parallele comportant une pluralite d'unites de traitement connectees a un bus de communication, et adressables par leurs fonctionnalites |
CN1477575A (zh) * | 2002-07-26 | 2004-02-25 | �Ҵ���˾ | 从公布/订阅服务接收电子消息的方法和系统 |
WO2012139067A2 (en) * | 2011-04-07 | 2012-10-11 | Microsoft Corporation | Messaging interruptible blocking wait with serialization |
CN102946376A (zh) * | 2011-11-29 | 2013-02-27 | Ut斯达康通讯有限公司 | 一种异步通讯的实现方法 |
CN103164273A (zh) * | 2012-09-06 | 2013-06-19 | 佳都新太科技股份有限公司 | 一种利用自扩展的阻塞算法将同步服务调用转换为异步并行式调用的方法 |
CN103546476A (zh) * | 2013-10-30 | 2014-01-29 | 北京华胜天成科技股份有限公司 | 页面组件之间的消息传递方法及系统 |
-
2014
- 2014-10-16 CN CN201410551054.7A patent/CN104360904A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002052414A1 (fr) * | 2000-12-22 | 2002-07-04 | Wany Sa | Architecture electronique parallele comportant une pluralite d'unites de traitement connectees a un bus de communication, et adressables par leurs fonctionnalites |
CN1477575A (zh) * | 2002-07-26 | 2004-02-25 | �Ҵ���˾ | 从公布/订阅服务接收电子消息的方法和系统 |
WO2012139067A2 (en) * | 2011-04-07 | 2012-10-11 | Microsoft Corporation | Messaging interruptible blocking wait with serialization |
CN102946376A (zh) * | 2011-11-29 | 2013-02-27 | Ut斯达康通讯有限公司 | 一种异步通讯的实现方法 |
CN103164273A (zh) * | 2012-09-06 | 2013-06-19 | 佳都新太科技股份有限公司 | 一种利用自扩展的阻塞算法将同步服务调用转换为异步并行式调用的方法 |
CN103546476A (zh) * | 2013-10-30 | 2014-01-29 | 北京华胜天成科技股份有限公司 | 页面组件之间的消息传递方法及系统 |
Non-Patent Citations (5)
Title |
---|
BOB BEAUCHEMIN DAN: "《SQL SERVER 2005开发者指南》", 1 June 2008 * |
KEVIN HOFFMAN: "《VISUAL C# 2005技术内幕》", 30 May 2007, 机械工业出版社 * |
匿名: "《【Android】事件总线(解耦组件)EventBus详解》", 《HTTPS://WWW.CNBLOGS.COM/LCW/P/4002231.HTML》 * |
并发编程网: "《[Google Guava] 11-事件总线》", 《HTTP://JU.OUTOFMEMORY.CN/ENTRY/69857》 * |
雷明: "基于混合模式构建前端表现层框架", 《计算机与现代化》 * |
Cited By (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106162166A (zh) * | 2015-03-23 | 2016-11-23 | Tcl集团股份有限公司 | 一种工厂遥控器按键事件处理方法和装置 |
CN106162166B (zh) * | 2015-03-23 | 2018-04-17 | Tcl集团股份有限公司 | 一种工厂遥控器按键事件处理方法和装置 |
CN105404556B (zh) * | 2015-10-22 | 2018-10-30 | 江苏省电力公司扬州供电公司 | 基于l-qt-p多线程事件触发机制的通信系统及方法 |
CN105404556A (zh) * | 2015-10-22 | 2016-03-16 | 江苏省电力公司扬州供电公司 | 基于l-qt-p多线程事件触发机制的通信系统及方法 |
CN106250229B (zh) * | 2016-08-16 | 2020-01-24 | 东软集团股份有限公司 | 事件处理的方法及装置 |
CN106250229A (zh) * | 2016-08-16 | 2016-12-21 | 东软集团股份有限公司 | 事件处理的方法及装置 |
CN107038076A (zh) * | 2016-10-25 | 2017-08-11 | 努比亚技术有限公司 | 组件系统及组件交互方法 |
CN106598751A (zh) * | 2016-10-31 | 2017-04-26 | 武汉斗鱼网络科技有限公司 | 通过事件总线分发事件的方法及系统 |
CN108255545A (zh) * | 2016-12-28 | 2018-07-06 | 阿里巴巴集团控股有限公司 | 组件间的功能调用方法、装置及组件化架构系统 |
CN107220129A (zh) * | 2017-04-14 | 2017-09-29 | 武汉斗鱼网络科技有限公司 | 一种软件模块间的通信方法和系统 |
CN107239275A (zh) * | 2017-05-17 | 2017-10-10 | 努比亚技术有限公司 | 应用运行方法、终端及计算机可读存储介质 |
CN110018910B (zh) * | 2018-01-08 | 2021-07-23 | 武汉斗鱼网络科技有限公司 | 事件总线的注册模板实现方法、存储介质、设备及系统 |
CN110018910A (zh) * | 2018-01-08 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 事件总线的注册模板实现方法、存储介质、设备及系统 |
CN108920358A (zh) * | 2018-06-05 | 2018-11-30 | 东软集团股份有限公司 | 消息总线的路由表生成方法、装置、存储介质及电子设备 |
CN108958717A (zh) * | 2018-06-28 | 2018-12-07 | 深圳数字动能信息技术有限公司 | C++事件总线实现方法 |
CN108958717B (zh) * | 2018-06-28 | 2023-02-28 | 深圳数字动能信息技术有限公司 | C++事件总线实现方法 |
CN110659033B (zh) * | 2018-06-29 | 2023-08-11 | 深圳耐看科技有限公司 | 协议注册分发方法、存储介质、电子设备及系统 |
CN110659033A (zh) * | 2018-06-29 | 2020-01-07 | 武汉斗鱼网络科技有限公司 | 协议注册分发方法、存储介质、电子设备及系统 |
CN110688203A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN110688203B (zh) * | 2018-07-05 | 2022-05-13 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN110895848B (zh) * | 2018-09-13 | 2022-08-12 | 北京怡合春天科技有限公司 | 一种基于事件总线的智能排队模式及系统 |
CN110895848A (zh) * | 2018-09-13 | 2020-03-20 | 北京怡合春天科技有限公司 | 一种基于事件总线的智能排队模式及系统 |
CN109101340A (zh) * | 2018-09-18 | 2018-12-28 | 武汉斗鱼网络科技有限公司 | 弹幕消息的动态分发方法、装置、设备和存储介质 |
CN109284098A (zh) * | 2018-09-25 | 2019-01-29 | 四川长虹电器股份有限公司 | 基于RxJava构建事件总线RxBus的方法 |
CN112860529B (zh) * | 2019-11-28 | 2022-11-08 | 瑞昱半导体股份有限公司 | 通用分析装置与方法 |
CN112860529A (zh) * | 2019-11-28 | 2021-05-28 | 瑞昱半导体股份有限公司 | 通用分析装置与方法 |
CN111581827A (zh) * | 2020-05-09 | 2020-08-25 | 中国人民解放军海军航空大学 | 一种面向分布式仿真的事件交互方法及系统 |
CN111581827B (zh) * | 2020-05-09 | 2023-04-21 | 中国人民解放军海军航空大学 | 一种面向分布式仿真的事件交互方法及系统 |
CN112084044A (zh) * | 2020-08-27 | 2020-12-15 | 腾讯科技(深圳)有限公司 | 系统中事件处理方法及相关装置 |
CN112084044B (zh) * | 2020-08-27 | 2024-02-02 | 腾讯科技(深圳)有限公司 | 系统中事件处理方法及相关装置 |
CN112379979A (zh) * | 2020-10-27 | 2021-02-19 | 航天信息股份有限公司 | 一种应用于税控服务的线程超时监控方法 |
CN113051511A (zh) * | 2021-03-08 | 2021-06-29 | 北京百度网讯科技有限公司 | 页面消息分发方法、装置、设备和存储介质 |
CN113051511B (zh) * | 2021-03-08 | 2024-03-12 | 北京百度网讯科技有限公司 | 页面消息分发方法、装置、设备和存储介质 |
CN113626219A (zh) * | 2021-08-06 | 2021-11-09 | 湖南大学 | 一种基于注册回调机制的线程间数据分发方法 |
CN113626219B (zh) * | 2021-08-06 | 2022-11-22 | 湖南大学 | 一种基于注册回调机制的线程间数据分发方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104360904A (zh) | 基于事件总线的模块间消息传递机制 | |
CN103870255B (zh) | 浮动组件显示方法及装置 | |
CN108182131B (zh) | 监控应用运行状态的方法、装置、存储介质及电子设备 | |
CN104216768A (zh) | 一种数据处理方法及装置 | |
CN103176720B (zh) | 一种移动终端在全屏运行界面时显示系统状态信息的方法 | |
CN106648816B (zh) | 多线程处理系统及方法 | |
WO2021057925A1 (zh) | 智能设备的控制方法、装置以及智能设备、存储介质 | |
US8843930B2 (en) | Thread scheduling and control framework | |
KR20180125498A (ko) | 안드로이드 기반의 팝업 프롬프트 방법 및 디바이스 | |
CN106250246A (zh) | 一种事件传递的方法及系统 | |
CN104461789A (zh) | 一种实现灾备系统主备切换的控制方法和系统 | |
CN109716735A (zh) | 用于在于一个或多个应用平台上执行的隔离的应用之间共享应用数据的系统和方法 | |
WO2012049681A4 (en) | A method and system for sending an interactive message | |
JP2015114895A5 (zh) | ||
CN115328664A (zh) | 一种消息消费方法、装置、设备及介质 | |
CN107632885A (zh) | 组件间的回调管理方法和装置 | |
CN103645940A (zh) | 远程调用方法及系统 | |
CN104407917A (zh) | 一种基于jms的交易处理方法及装置 | |
CN104486149A (zh) | 一种用于地面测试的有限状态机方法 | |
CN103631647A (zh) | 一种实现分布式事务的方法和装置 | |
CN104978202A (zh) | 一种activity属性扩展方法及装置 | |
CN104866403B (zh) | 分布式任务处理系统及方法 | |
CN102915256B (zh) | 多核浏览器下的消息传递方法与装置 | |
CN102929594B (zh) | 基于android系统的3D界面实现方法和系统 | |
RU2016124118A (ru) | Устройство обработки информации и способ обработки информации |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150218 |
|
RJ01 | Rejection of invention patent application after publication |