CN101315609A - 实现单进程中组件间进行通信的装置和方法 - Google Patents
实现单进程中组件间进行通信的装置和方法 Download PDFInfo
- Publication number
- CN101315609A CN101315609A CNA200710099928XA CN200710099928A CN101315609A CN 101315609 A CN101315609 A CN 101315609A CN A200710099928X A CNA200710099928X A CN A200710099928XA CN 200710099928 A CN200710099928 A CN 200710099928A CN 101315609 A CN101315609 A CN 101315609A
- Authority
- CN
- China
- Prior art keywords
- message
- information
- asynchronous
- assembly
- theme
- 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
Images
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
本发明提供了一种实现单进程中组件间进行通信的装置,该装置主要包括:消息代理。该方法主要包括:所述消息代理接收各个组件发送的消息,并将接收到的消息进行保存;所述消息代理接收组件发送的消息订阅信息,从所述保存的消息中取出所述消息订阅信息所对应的消息,并将取出的消息发送给所述发送消息订阅信息的组件。本发明所述装置和方法,实现了单进程中组件间的消息通讯,并且具有实现简单、使用方便、易于扩展的特点。
Description
技术领域
本发明涉及计算机应用领域,尤其涉及一种实现单进程中组件间进行通信的装置和方法。
背景技术
一个软件系统通常由多个功能组件(模块)组成,每个组件负责特定的任务,各个不同的组件间通过数据交互来协同工作。在实际的软件生产中,软件生产企业需要根据客户的需要对软件进行定制,生产出符合客户需要的功能组件。
比如,对于同一个软件,有些客户需要某项功能,而另一些客户却不需要该功能;有些客户目前不需要某项功能,而将来却可能有需求该功能。因此,为了降低软件生产企业的成本,需要增加软件的灵活性和扩展性,要求一个软件的各个组件间不互相依赖,任何一个非核心组件的添加/删除/修改都不会影响其它组件的功能。并且各个组件间可以很方便地实现动态组合。
现有技术中第一种组件间进行通信的方法为:单进程中组件间的数据交互通过直接接口调用的方式来实现。该直接接口调用的原理示意图如图1所示,任意两个组件间都预先定义进行互相通信的消息接口和相应的方法,当一个组件需要和另一个组件进行数据交互的时候,它就调用相应消息接口的特定方法,通过该特定方法发送数据给对方、从对方获取数据或触发对方的一个行为。
在实现本发明的过程中,发明人发现上述现有技术中第一种组件间进行通信的方法存在如下的问题:
1、任意两个组件间都必须预先设定消息接口,随着组件的增多,消息接口必将变得多且复杂,从而导致对组件进行代码维护和重用变得非常困难;
2、该方法采用的直接接口调用导致组件间存在代码级的依赖关系,一个组件的去除会导致相关组件连编译都无法通过,除非对相关组件修改代码;
3、由于组件间进行互相通信的消息接口和相应的方法都是预先定义的,因此,很难实现组件间进行发布/订阅模式的消息传递;很难实现组件间进行异步消息传递;必须通过编写代码才能实现组件间的消息驱动。
现有技术中第二种组件间进行通信的方法为:使用loC(控制反转文)容器来解除直接接口调用时在代码中出现的硬编码,实现单进程中组件间的消息接口与实现的分离,从而解除组件间的代码级的依赖关系。
在实现本发明的过程中,发明人发现上述现有技术中第二种组件间进行通信的方法的缺点为:
1、该方法虽然解除了组件间代码级的依赖关系,但是随着组件的增多,消息接口仍然将变得多且复杂;
2、很难实现组件间进行发布/订阅模式的消息传递;很难实现组件间进行异步消息传递;必须通过编写代码才能实现组件间的消息驱动。
现有技术中第三种组件间进行通信的方法为:通过Socket通讯来实现组件间的数据交互,上述socket通常也称作″套接字″,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过″套接字″向网络发出请求或者应答网络请求。如基于Socket通讯的JMS(Java Message Service,Java消息服务)方案。
在实现本发明的过程中,发明人发现上述现有技术中第三种组件间进行通信的方法的缺点为:
1、该方法主要针对分布式组件间通信,不适合基于单进程的组件间通信;
2、该方法实现起来过于复杂,性能开销大。
发明内容
本发明实施例提供了一种实现单进程中组件间进行通信的装置和方法,从而解决了现有软件系统中组件间进行通信的消息接口复杂、组件间存在代码级的依赖关系的问题。
本发明实施例是通过以下技术方案实现的:
一种实现单进程中组件间进行通信的装置,包括:消息代理,所述消息代理具体包括:消息池和消息处理模块,其中,
消息池:用于保存消息处理模块传递过来的消息;
消息处理模块:用于接收组件向消息代理发送的消息订阅信息,从消息池中取出所述消息订阅信息所对应的消息,并将取出的消息发送给所述发送消息订阅信息的组件;接收各个组件向消息代理发送的消息并传递给消息池。
一种实现单进程中组件间进行通信的方法,在软件系统中设置消息代理,所述方法具体包括:
所述消息代理接收各个组件发送的消息,并将接收到的消息进行保存;
所述消息代理接收组件发送的消息订阅信息,从所述保存的消息中取出所述消息订阅信息所对应的消息,并将取出的消息发送给所述发送消息订阅信息的组件。由上述本发明实施例提供的技术方案可以看出,本发明实施例通过在软件系统中设置消息代理,从而解决了现有软件系统中组件间进行通信的消息接口复杂、组件间存在代码级的依赖关系的问题,实现了单进程中组件间的消息通讯。
附图说明
图1为现有技术中组件间进行通信的直接接口调用的原理示意图;
图2为本发明实施例所述轻量级消息机制的原理示意图;
图3为本发明实施例所述消息代理的结构示意图;
图4为本发明实施例所述组件向消息代理发送普通消息的方法的实现原理示意图;
图5为本发明实施例所述同步订阅消息的处理方法的实现原理示意图;
图6为本发明实施例所述同步订阅消息的处理方法的具体处理流程图;
图7为本发明实施例所述异步订阅消息的处理方法的实现原理示意图;
图8为本发明实施例所述异步订阅消息的处理方法的具体处理流程图;
图9为本发明实施例所述异步订阅取消消息的处理方法的实现原理示意图;
图10为本发明实施例所述应用示例中的类与类之间的结构示意图。
具体实施方式
本发明实施例提供了一种实现单进程中组件间进行通信的装置和方法。
本发明实施例在软件系统中设置软件代理,在内存中开辟一块单独区域作为存放消息的消息池(MessagePool),该消息池也称为消息中转地,通过消息代理来管理消息池。软件系统中的各个组件都与该消息代理进行消息交互,消息代理利用上述消息池进行消息的接收、复制、转发、销毁等所有生命周期事件。简言之,就是使组件间消息的直接交互转变为通过上述消息代理来交互。本发明实施例将上述消息交互机制称为轻量级消息机制,该轻量级消息机制的原理示意图如图2所示。
上述轻量级消息机制将企业级分布式系统间的消息机制缩小,形成一个单进程中组件间的消息机制。上述轻量级消息机制涉及的消息事件主要有以下四个:
1、发送消息事件,用于组件向消息代理发送需要和其它组件进行共享的消息。该发送消息事件不考虑消息发送成功的确认,因此,该消息发送为同步发送。
2、同步订阅事件,用于组件向消息代理发送同步订阅信息,该同步订阅信息可以为所订阅消息的主题,可以通过同步订阅消息来携带。当组件向消息代理发送同步订阅消息后,消息代理从消息池中取出所述同步订阅消息所对应的消息,并将取出的消息返回给该组件后,本次同步订阅消息自动失效,本次同步订阅事件结束。因此,上述同步订阅为单次订阅。
3、异步订阅事件,用于组件向消息代理发送异步订阅消息,该异步订阅信息可以为所订阅消息的主题,可以通过异步订阅消息来携带。当组件向消息代理发送异步订阅消息后,消息代理从消息池中取出所述异步订阅消息所对应的消息,并将取出的消息返回给该组件后,本次异步订阅消息仍然失效。当消息代理再次从消息池中取出所述异步订阅消息所对应的消息后,需要再次将该消息发送给所述发送异步订阅消息的组件。直到所述发送异步订阅消息的组件取消本次异步订阅消息,本次异步订阅事件才结束。因此,上述异步订阅为持久订阅。
4、取消异步订阅事件,用于组件向消息代理发送异步订阅取消信息,该异步订阅取消信息可以通过异步订阅取消消息来携带。当组件向消息代理发送异步订阅取消消息后,该组件以前向消息代理发送的异步订阅消息即失效。
基于上述轻量级消息机制,本发明实施例所述组件间进行通信的装置为消息代理,在消息代理中包括一个或多个Carrier(同步消息处理器)和Consumer(异步消息处理器),该Carrier和Consumer作为一种消息处理器,可以完成在组件和消息代理之间传递各种信息,包括发送消息、同步订阅时发送订阅信息和取回消息、以及异步订阅时发送订阅信息等功能。上述Carrier还可以完成监视消息池中的消息的功能。在同步订阅事件中,一个Carrier对应一个发送同步订阅消息的组件。
上述Consumer用于获得订阅组件所异步订阅的消息,并进行处理后发送给订阅组件。
该消息代理的结构示意图如图3所示,包括消息池和消息处理模块。各个模块的功能如下:
消息池:用于保存消息处理模块发送过来的需要和其它组件进行共享的消息,在消息池中需要保存各个消息的主题和消息之间的对应关系,一个主题唯一对应一个消息。包括:消息保存模块。
其中,消息保存模块:用于接收消息处理模块传递过来的各个组件向消息代理发送的需要和其它组件进行共享的消息,并将接收到的消息进行保存,并且保存各个消息的主题和消息之间的对应关系。
消息处理模块:用于接收组件向消息代理发送的需要和其它组件进行共享消息并传递给消息池;接收组件向消息代理发送的消息订阅信息,从消息池中取出所述消息订阅信息所对应的消息并发送给所述组件。包括:消息接收模块、同步订阅消息处理模块和异步订阅消息处理模块。
其中,消息接收模块:用于接收各个组件向消息代理发送的消息,并将接收到的消息传递给消息池。
其中,同步订阅消息处理模块:用于接收组件向消息代理发送的同步订阅信息,将同步订阅信息中携带的订阅组件对应的Carrier的信息和所订阅的主题的对应关系进行保存。从消息池中取出订阅组件所订阅的主题对应的消息体。该消息体包含消息内容、消息主题等属性。从消息池中取出所述主题对应的所有Carrier的信息,根据该所有Carrier的信息获得相应的Carrier。通过所述Carrier将所述取出的消息体发送给对应的订阅组件。包括:同步订阅信息接收和保存模块、同步订阅消息获取和发送模块。
上述同步订阅消息处理模块中的同步订阅信息接收和保存模块:用于接收组件通过Carrier向消息代理发送的同步订阅信息,将同步订阅信息中携带的订阅组件对应的Carrier的信息和所订阅的主题的对应关系进行保存;该同步订阅信息为单次订阅信息,消息代理只向组件返回一次该同步订阅信息所订阅的消息。
在同步订阅信息接收和保存模块中可以维持一个synchSubscribePool(同步-订阅-池)Hashtable(哈希表)。该synchSubscribePool表用来存放同步订阅信息,根据消息处理模块传递过来的同步订阅信息来建立。在消息代理向组件发送了一个同步订阅信息所对应的消息后,则从该synchSubscribePool表中将该同步订阅信息删除。
上述同步订阅信息包括每个发送同步订阅消息的订阅组件所订阅的消息的主题和对应的Carrier的信息。由于一个主题的消息可以被多个组件同步订阅,因此每个主题都对应着一个向量,该向量中记录所有订阅该主题对应的消息的组件所对应的所有Carrier的信息。
上述同步订阅消息处理模块中的同步订阅消息获取和发送模块:用于根据同步订阅信息接收模块传递过来的同步订阅信息,从消息池中获取订阅组件所订阅的主题对应的消息体。从消息池中取出所述主题对应的所有Carrier的信息,根据该所有Carrier的信息获得相应的Carrier。将所述消息体对应复制多份后,通过各个Carrier将所述取出的消息体发送给各个对应的订阅组件。然后,通知消息池将各个订阅组件所对应的Carrier进行释放,将synchSubscribePool表中记录的各个订阅组件所对应的Carrier的信息和主题的对应关系进行删除。
其中,异步订阅消息处理模块:用于接收各个组件向消息代理发送的异步订阅信息并传递给消息池,该异步订阅信息包括订阅组件对应的Consumer的信息和所订阅的主题;从消息池中获取订阅组件所异步订阅的主题对应的消息体。从消息池中取出所述主题对应的所有Consumer的信息,根据该所有Consumer的信息获得相应的Consumer,通过各个Consumer将所述取出的消息体分别发送给各个对应的订阅组件。根据接收到的异步订阅取消消息取消所述组件的异步订阅信息。包括:异步订阅信息接收和保存模块、异步订阅消息获取和发送模块和异步订阅取消信息接收模块。
上述异步订阅消息处理模块中的异步订阅信息接收和保存模块:用于接收组件通过Carrier向消息代理发送的异步订阅消息,将异步订阅消息携带的订阅组件对应的Consumer的信息和所订阅的主题的对应关系进行保存。该异步订阅信息为持久订阅信息,消息代理向组件返回一次或多次该同步订阅信息所订阅的消息。
在异步订阅信息处理模块中可以根据消息处理模块传递过来的异步订阅信息来建立和维持asynchPublishPool(异步-发布-池)、asynchSubscribePool(异步-订阅-池)2个Hashtable(哈希表)。
上述asynchPublishPool表中包括每个发送异步订阅消息的订阅组件和一个Consumer的信息的对应关系。
一个组件可以同时异步订阅多种不同主题的消息,因此该组件可能同时收到多个异步订阅的消息,为了保证该组件对应的Consumer能够按照消息到来的顺序依次处理这些消息,每个Consumer都对应一个向量,在该向量中记录处理所有该组件异步订阅的主题的先后顺序。
asynchSubscribePool表用来存放异步订阅信息,该异步订阅信息包括每个发送异步订阅消息的订阅组件所订阅的消息的主题和对应的Consumer的信息。由于一个主题的消息可以被多个组件异步订阅,因此每个主题都对应着一个向量,该向量中记录所有订阅该主题消息的组件所对应的Consumer的信息。
上述异步订阅消息处理模块中的异步订阅消息获取和发送模块:用于根据异步订阅信息接收模块传递过来的异步订阅消息,从消息池中获取订阅组件所异步订阅的主题对应的消息体。从消息池中取出所述主题对应的所有Consumer的信息,根据该所有Consumer的信息获得相应的Consumer,将所述消息体对应复制多份后,通过各个Consumer将所述取出的消息体分别发送给各个对应的订阅组件。当消息池中再次出现订阅组件所订阅的主题对应的消息体时,再次取出该消息体并发送给对应的订阅组件。
上述异步订阅消息处理模块中的异步订阅取消信息接收模块:用于接收组件通过Carrier向消息代理发送的异步订阅取消消息,将异步订阅取消消息携带的订阅组件对应的Consumer的信息和所订阅的主题传递给消息池。然后,通知消息池中的订阅信息管理模块将AsynchPublishPool表中记录的订阅组件和Consumer的信息对应关系进行删除,将asynchSubscribePool表中记录的主题和Consumer的信息对应关系进行删除。
上述消息处理模块中保存的同步订阅信息和异步订阅信息还可以保存于消息池中,或者,在消息代理中通过单独的模块来保存。
本发明实施例提供了:组件向消息代理发送消息的处理流程、组件向消息代理发送同步订阅信息的处理流程、组件向消息代理发送异步订阅信息的处理流程和组件向消息代理发送异步订阅取消信息的处理流程。
本发明实施例所述组件向消息代理发送消息的方法的实现原理示意图如图4所示,具体处理过程如下:
当一个组件要向消息代理发送消息时,该组件首先需要创建一个主题,并封装该主题对应的消息体。同时该组件需要联系消息代理,从消息代理那里获得一个Carrier。然后,该组件将所述封装的消息体发送给所述Carrier,由所述Carrier再将所述消息体发送给消息代理。
在实际应用中,组件还可以通过组件和消息代理之间的接口向消息代理发送消息。
组件通过向消息代理发送同步订阅信息或异步订阅信息来获取消息池中保存的消息,本发明实施例所述组件向消息代理发送同步订阅信息的实现原理示意图如图5所示,具体处理流程如图6所示,包括如下步骤:
步骤61、组件通过Carrier向消息代理发送主题。
当一个组件要向消息代理发送同步订阅信息时,该组件首先需要创建一个需要订阅的消息的主题。同时该组件需要联系消息代理,从消息代理那里获得一个Carrier。该组件将所述主题发送给所述Carrier,由所述Carrier再将所述主题和所述Carrier的信息发送给消息代理。
步骤62、消息代理将接收到的主题和Carrier的信息的对应关系进行关联保存。
消息代理在接收到所述组件通过所述其对应的Carrier发送过来的主题和Carrier的信息后,需要将主题和Carrier的信息的对应关系进行关联保存。
消息代理首先判断消息池中的synchSubscribePool表中是否已经有该主题的订阅记录,如果有,则在该主题对应的向量中添加所述组件对应的Carrier信息;如果没有,则在synchSubscribePool表中添加所述主题和所述Carrier的信息之间的对应关系的记录,并生成所述主题对应的向量,该向量中记录所有订阅该主题对应的消息的组件所对应的所有Carrier的信息。
步骤63、消息代理通过Carrier将组件所订阅的消息发送给组件。
当消息代理将组件对应的Carrier的信息和所订阅的主题进行关联保存后,该Carrier就需要监视消息池中保存的消息信息,当消息池中已经保存了所述组件所订阅的主题对应的消息体时,所述Carrier根据synchSubscribePool表来确定该主题对应的消息体的所有同步订阅者,从所述主题对应的向量中获得该主题对应的消息体的所有Carrier的信息,根据该所有Carrier的信息获得相应的Carrier,通过Carrier从消息池中获取订阅组件所订阅的主题对应的消息体。并将所述消息体复制对应多份后递交给各个Carrier。然后,由各个Carrier将接收到的消息体分别发送给各个订阅组件。
在同步订阅中,一个Carrier同时只能负责一个订阅任务,该Carrier不仅要传送订阅信息,还要等待消息到来,因此,一个组件相当于对应着一个Carrier。
在实际应用中,还可以在消息池中增加一个表synchPublishPool,该synchPublishPool用来存放同步订阅的消息,另外,在消息代理中再设置一个或多个消息分发者,该消息分发者用于分发同步订阅的消息。于是,组件只需要通过Carrier将消息体的信息放入synchPublishPool表中即可,在消息分发时,由消息分发者根据synchPublishPool表和synchSubscribePool来确定主题和Carrier之间的对应关系,并将所述主题对应的消息体复制对应多份后递交给各个Carrier。
之后,消息代理将发送所述主题的各个订阅组件所对应的Carrier进行释放,将synchSubscribePool表中记录的各个订阅组件所对应的Carrier的信息和主题的对应关系进行删除。
本发明实施例所述组件向消息代理发送异步订阅信息的实现原理示意图如图7所示,具体处理流程如图8所示,包括如下步骤:
步骤81、组件通过Carrier向消息代理发送主题和Consumer的信息。
当一个组件要向消息代理发送异步订阅消息时,该组件首先需要创建一个需要订阅的消息的主题,指定取回所订阅消息的Consumer。同时该组件需要联系消息代理,从消息代理那里获得一个Carrier。然后,该组件将所述主题和Consumer的信息发送给所述Carrier,由所述Carrier再将所述主题和Consumer的信息发送给消息代理。
步骤82、消息代理将接收到的主题和Consumer的信息、Consumer的信息和组件的对应关系进行关联保存。
消息代理在接收到所述组件通过其对应的Carrier发送过来的主题和Consumer的信息后,需要将主题和Consumer的信息、Consumer的信息和组件的对应关系进行关联保存。
消息代理首先判断消息池中的asynchSubscribePool表中是否已经有该主题的订阅记录,如果有,则在该主题对应的向量中添加所述组件对应的Consumer信息;如果没有,则在asynchSubscribePool表中添加所述主题和所述Consumer的信息之间的对应关系的记录,并生成所述主题对应的向量。该向量中记录所有订阅该主题对应的消息的组件所对应的Consumer。
消息代理还需要判断消息池中的asynchPublishPool表中是否已经有所述Consumer的信息的订阅记录,如果有,则在该Consumer对应的向量中添加所述主题信息;如果没有,则在asynchPublishPool表中添加所述Consumer的信息和订阅组件之间的对应关系的记录,并生成所述Consumer对应的向量,在该向量中记录处理所有该组件异步订阅的主题的先后顺序。
在异步订阅中,一个Carrier可以同时负责多个订阅任务,该Carrier只负责传送订阅信息,不必等待消息到来,因此,一个组件相当于对应着一个Consumer。
步骤83、消息代理通过Consumer将组件所订阅的消息发送给组件。
当消息代理将上述主题和Consumer的信息、Consumer的信息和组件的对应关系进行关联保存后,该组件可以继续去处理其他的事情,并且该组件对应的Carrier便被释放掉。
然后,消息代理启动一个消息发行器来监控asynchPublishPool表中对应的Consumer项,该消息发行器监控消息池中是否有asynchSubscribePool表中所述Consumer项对应的主题对应的消息体,如果有,则从所述主题对应的向量中获得该主题对应的消息体的所有Consumer的信息,根据该所有Consumer的信息获得各个相应的Consumer。
之后,所述消息发行器便将所述消息体复制对应多份后递交给各个Consumer,由各个Consumer将接收到的消息体分别发送给各个订阅组件。
当所述消息发行器监控到消息池中再次出现所述主题对应的消息体时,所述消息发行器再次取出该消息体并发送给对应的各个Consumer,由各个Consumer将接收到的消息体分别发送给各个订阅组件。
一旦某个消息发行器发现asynchPublishPool表中找不到其所监控的Consumer,就说明该异步订阅已被取消,于是消息发行器自动终止对上述Consumer的监听。
本发明实施例所述组件向消息代理发送异步订阅取消信息的实现原理示意图如图9所示,具体处理过程如下:
已经进行异步订阅的组件联系消息代理,从消息代理那里获得一个Carrier。然后,上述组件将已经订阅的主题和Consumer的信息发送给上述Carrier,上述Carrier再将接收到的主题和Consumer的信息发送给消息代理。
消息代理再将asynchPublishPool表中记录的上述组件和所述Consumer的信息的对应关系进行删除,同时,将asynchSubscribePool表中记录的所述Consumer的信息和主题的对应关系进行删除。
本发明实施例还提供了本发明所述方法的一个应用示例。在该应用示例中,首先定义如图10所示的类与类之间的结构示意图。
在图9所示的类与类之间的结构示意图中,MessageAgent类通过getMessageAgent()方法获得唯一实例。Distributor类继承了Thread类。Carrier类中的send(Message message)方法用于发送消息,receive(Topic topic)方法用于同步消息订阅,subscribe(Topic topic,Consumerconsumer)方法用于异步消息订阅,unSubscribe(Topic topic,Consumerconsumer)方法用于取消订阅。Consumer接口中的consume(Messagemessage)方法用于处理消息, MyConsumer类是Consumer接口的实现类。Topic类和Message类是抽象父类,可以通过继承在此基础上扩展出各种类型的主题和消息。
上述应用示例中的实现代码如下:
1、发布消息。
获得唯一的消息代理
MessageAgent messageAgent=MessageAgent.getMessageAgent( );
创建消息传递者
Carrier carrier=messageAgent.creatCarrier();
创建主题
Topic topic=new StringTopic();
topic.setStringTopic(″Weather″);
创建消息
Message message=new TextMessage();
message.setText(″Sunny″);
message.setTopic(topic);
发送消息
carrier.send(message);
2、同步订阅消息。
获得唯一的消息代理
MessageAgent messageAgent=MessageAgent.getMessageAgent( );
创建消息传递者
Carrier carrier=messageAgent.creatCarrier();
创建主题
Topic topic=new StringTopic();
topic.setStringTopic(″Weather″);
订阅消息
Message message=carrier.receive(topic);
3、异步订阅消息。
获得唯一的消息代理
MessageAgent messageAgent=MessageAgent.getMessageAgent( );
创建消息传递者
Carrier carrier=messageAgent.creatCarrier();
创建消费者
Consumer consumer=new MyConsumer();
创建主题
Topic topic=new StringTopic();
topic.setStringTopic(″Weather″);
订阅消息
carrier.subscribe(topic,consumer);
4、取消订阅。
carrier.unsubscribe(topic,consumer)。
综上所述,本发明实施例提出的轻量级消息机制是一种线程间的通信,可靠性比分布式进程间的通信高很多。该轻量级消息机制可以使组件间的数据通过消息的方式进行传递,从而实现组件间的解耦,降低组件间的耦合度,方便快捷地将不同组件进行组合,以满足符合客户要求的不同的功能需求,从而实现客户的业务定制和业务升级能力。
本发明实施例实现了单进程中组件间的消息通讯,并且本发明实施例所述方法和装置实现简单、使用方便、易于扩展;本发明实施例解除了组件间代码级的依赖关系,实现了发布/订阅模式的消息传递,实现了异步消息传递和消息驱动。前面提到的发明目的是:解决现有软件系统中组件间进行通信的消息接口复杂。
本发明实施例所述装置和方法适用于单进程软件系统。
以上所述,仅为本发明实施例较佳的具体实施方式,但本发明实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明实施例的保护范围之内。因此,本发明实施例的保护范围应该以权利要求的保护范围为准。
Claims (10)
1、一种实现单进程中组件间进行通信的装置,其特征在于,包括:消息代理,所述消息代理具体包括:消息池和消息处理模块,其中,
消息池:用于保存消息处理模块传递过来的消息;
消息处理模块:用于接收组件向消息代理发送的消息订阅信息,从消息池中取出所述消息订阅信息所对应的消息,并将取出的消息发送给所述发送消息订阅信息的组件;接收各个组件向消息代理发送的消息并传递给消息池。
2、根据权利要求1所述的实现单进程中组件间进行通信的装置,其特征在于,所述消息池包括:
消息保存模块:用于接收消息处理模块传递过来的各个组件向消息代理发送的消息,将接收到的消息进行保存,并且保存各个消息的主题和消息之间的对应关系。
3、根据权利要求1或2所述的实现单进程中组件间进行通信的装置,其特征在于,所述消息处理模块具体包括:
消息接收模块:用于接收各个组件向消息代理发送的消息,并将接收到的消息传递给消息池;
同步订阅消息处理模块:用于接收各个组件向消息代理发送的同步订阅信息,将所述同步订阅信息中携带的消息的主题和对应的同步消息处理器的信息之间的对应关系进行保存;从消息池中取出所述同步订阅信息所对应的消息并发送给所述发送同步订阅信息的组件;
异步订阅消息处理模块:用于接收各个组件向消息代理发送的异步订阅信息,将所述异步订阅消息中携带的订阅组件和异步消息处理器的信息之间的对应关系进行保存;从消息池中取出所述异步订阅信息所对应的消息并发送给所述发送异步订阅信息的组件。
4、根据权利要求3所述的实现单进程中组件间进行通信的装置,其特征在于,所述同步订阅消息处理模块具体包括:
同步订阅信息接收和保存模块:用于接收组件向消息代理发送的同步订阅信息,将所述同步订阅信息中携带的消息的主题和对应的同步消息处理器的信息之间的对应关系进行保存;
同步订阅消息获取和发送模块:用于根据同步订阅信息中携带的所订阅的消息的主题和对应的同步消息处理器的信息,从消息池中取出组件所订阅的主题对应的消息和所有同步消息处理器的信息,根据该所有同步消息处理器的信息获得相应的同步消息处理器,通过各个同步消息处理器将所述取出的消息分别发送给各个对应的组件;通知同步订阅信息接收和保存模块将其保存的所述各个对应的组件所订阅的主题和同步消息处理器的信息的对应关系进行删除。
5、根据权利要求3所述的实现单进程中组件间进行通信的装置,其特征在于,所述异步订阅消息处理模块具体包括:
异步订阅信息接收和保存模块:用于接收组件向消息代理发送的异步订阅信息,将所述异步订阅消息中携带的订阅组件和异步消息处理器的信息之间的对应关系进行保存;
异步订阅消息获取和发送模块:用于根据异步订阅信息携带的订阅组件对应的异步消息处理器的信息和所订阅的主题,从消息池中取出组件所订阅的主题对应的消息和所有异步消息处理器的信息,根据该所有异步消息处理器的信息获得相应的异步消息处理器,通过各个异步消息处理器将所述取出的消息分别发送给各个对应的组件;
异步订阅取消信息接收模块:用于接收组件向消息代理发送的异步订阅取消信息,获取所述异步订阅取消信息携带的异步消息处理器和主题的信息,通知异步订阅信息接收和保存模块将其保存的所述组件和异步消息处理器的信息的对应关系、所述组件所订阅的主题和异步消息处理器的信息的对应关系进行删除。
6、一种实现单进程中组件间进行通信的方法,其特征在于,在软件系统中设置消息代理,所述方法具体包括:
所述消息代理接收各个组件发送的消息,并将接收到的消息进行保存;
所述消息代理接收组件发送的消息订阅信息,从所述保存的消息中取出所述消息订阅信息所对应的消息,并将取出的消息发送给所述发送消息订阅信息的组件。
7、根据权利要求6所述的实现单进程中组件间进行通信的方法,其特征在于,所述消息代理接收组件发送的消息之前具体包括:
组件创建主题并封装该主题对应的消息,所述组件将所述消息发送给从消息代理获得的同步消息处理器,所述同步消息处理器将接收到的所述消息发送给消息代理。
8、根据权利要求6所述的实现单进程中组件间进行通信的方法,其特征在于,所述消息代理接收组件发送的消息订阅信息,从所述保存的消息中取出所述消息订阅信息所对应的消息,并发送给所述发送消息订阅信息的组件,具体包括:
组件创建要同步订阅的消息的主题,所述组件将所述主题发送给从消息代理获得的同步消息处理器,所述同步消息处理器将接收到的主题发送给消息代理,消息代理将接收到的所述主题和同步消息处理器的信息的对应关系进行保存;
取出消息代理中保存的所述主题对应的消息,根据消息代理中保存的所述主题和同步消息处理器的信息的对应关系,获得所述主题对应的所有同步消息处理器,将所述消息复制对应多份后递交给各个同步消息处理器,各个同步消息处理器将所述消息发送给各个对应组件;
所述消息代理将保存的所述各个对应的组件所订阅的主题和同步消息处理器的信息的对应关系进行删除。
9、根据权利要求6所述的实现单进程中组件间进行通信的方法,其特征在于,所述消息代理接收组件发送的消息订阅信息,从所述保存的消息中取出所述消息订阅信息所对应的消息,并发送给所述发送消息订阅信息的组件,具体包括:
组件创建要异步订阅的消息的主题,指定取回所异步订阅的消息的异步消息处理器的信息,所述组件将所述主题和异步消息处理器的信息发送给消息代理,消息代理将接收到的所述主题和异步消息处理器的信息、所述异步消息处理器的信息和所述组件的对应关系进行保存;
取出消息代理中保存的所述主题对应的消息,根据消息代理中保存的所述主题和异步消息处理器的信息的对应关系,获得所述主题对应的所有异步消息处理器,将所述消息复制对应多份后递交给各个异步消息处理器,各个异步消息处理器将所述消息发送给各个对应组件;
所述消息代理将保存的所述各个对应组件所订阅的主题和异步消息处理器的信息、所述异步消息处理器的信息和所述组件的对应关系进行删除。
10、根据权利要求6所述的实现单进程中组件间进行通信的方法,其特征在于,所述方法具体包括:
组件向消息代理发送携带异步订阅的消息的主题和异步消息处理器的信息的异步订阅取消消息,消息代理将保存的所述主题和异步消息处理器的信息、所述异步消息处理器的信息和所述组件的对应关系进行删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200710099928XA CN101315609A (zh) | 2007-05-31 | 2007-05-31 | 实现单进程中组件间进行通信的装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200710099928XA CN101315609A (zh) | 2007-05-31 | 2007-05-31 | 实现单进程中组件间进行通信的装置和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101315609A true CN101315609A (zh) | 2008-12-03 |
Family
ID=40106627
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA200710099928XA Pending CN101315609A (zh) | 2007-05-31 | 2007-05-31 | 实现单进程中组件间进行通信的装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101315609A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101964763A (zh) * | 2010-09-30 | 2011-02-02 | 北京神州泰岳软件股份有限公司 | 消息处理方法 |
CN102110026A (zh) * | 2011-02-09 | 2011-06-29 | 浪潮集团山东通用软件有限公司 | 一种基于配置的在界面元素之间传递消息的方法 |
CN101996095B (zh) * | 2009-08-26 | 2014-04-09 | 阿里巴巴集团控股有限公司 | 插件接入即时通讯程序的方法和装置 |
CN104298567A (zh) * | 2014-10-31 | 2015-01-21 | 亚信科技(南京)有限公司 | 一种保障消息处理一致性的系统及方法 |
CN104683731A (zh) * | 2015-03-20 | 2015-06-03 | 苏州科达科技股份有限公司 | 一种用于异构平台间通信的方法及系统 |
CN107066341A (zh) * | 2017-04-12 | 2017-08-18 | 武汉斗鱼网络科技有限公司 | 一种软件模块间的事件路由框架及方法 |
CN107205050A (zh) * | 2017-07-31 | 2017-09-26 | 杭州多麦电子商务股份有限公司 | 分布式消息数据服务集群 |
CN109408249A (zh) * | 2018-09-17 | 2019-03-01 | 中国建设银行股份有限公司 | 数据同步传输方法、系统、装置和存储介质 |
CN109445966A (zh) * | 2018-11-06 | 2019-03-08 | 网易传媒科技(北京)有限公司 | 事件处理方法、装置、介质和计算设备 |
CN110221927A (zh) * | 2019-06-03 | 2019-09-10 | 中国工商银行股份有限公司 | 异步消息处理方法和装置 |
WO2024092940A1 (zh) * | 2022-10-31 | 2024-05-10 | 海尔优家智能科技(北京)有限公司 | 组件间的消息传递方法和装置、存储介质及电子装置 |
-
2007
- 2007-05-31 CN CNA200710099928XA patent/CN101315609A/zh active Pending
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996095B (zh) * | 2009-08-26 | 2014-04-09 | 阿里巴巴集团控股有限公司 | 插件接入即时通讯程序的方法和装置 |
CN101964763A (zh) * | 2010-09-30 | 2011-02-02 | 北京神州泰岳软件股份有限公司 | 消息处理方法 |
CN102110026A (zh) * | 2011-02-09 | 2011-06-29 | 浪潮集团山东通用软件有限公司 | 一种基于配置的在界面元素之间传递消息的方法 |
CN104298567B (zh) * | 2014-10-31 | 2017-10-03 | 南京亚信软件有限公司 | 一种保障消息处理一致性的系统及方法 |
CN104298567A (zh) * | 2014-10-31 | 2015-01-21 | 亚信科技(南京)有限公司 | 一种保障消息处理一致性的系统及方法 |
CN104683731A (zh) * | 2015-03-20 | 2015-06-03 | 苏州科达科技股份有限公司 | 一种用于异构平台间通信的方法及系统 |
CN104683731B (zh) * | 2015-03-20 | 2019-02-19 | 苏州科达科技股份有限公司 | 一种用于异构平台间通信的方法及系统 |
WO2018188381A1 (zh) * | 2017-04-12 | 2018-10-18 | 武汉斗鱼网络科技有限公司 | 一种软件模块间的事件路由框架及方法 |
CN107066341A (zh) * | 2017-04-12 | 2017-08-18 | 武汉斗鱼网络科技有限公司 | 一种软件模块间的事件路由框架及方法 |
CN107205050A (zh) * | 2017-07-31 | 2017-09-26 | 杭州多麦电子商务股份有限公司 | 分布式消息数据服务集群 |
CN109408249A (zh) * | 2018-09-17 | 2019-03-01 | 中国建设银行股份有限公司 | 数据同步传输方法、系统、装置和存储介质 |
CN109445966A (zh) * | 2018-11-06 | 2019-03-08 | 网易传媒科技(北京)有限公司 | 事件处理方法、装置、介质和计算设备 |
CN109445966B (zh) * | 2018-11-06 | 2020-11-10 | 网易传媒科技(北京)有限公司 | 事件处理方法、装置、介质和计算设备 |
CN110221927A (zh) * | 2019-06-03 | 2019-09-10 | 中国工商银行股份有限公司 | 异步消息处理方法和装置 |
CN110221927B (zh) * | 2019-06-03 | 2021-11-09 | 中国工商银行股份有限公司 | 异步消息处理方法和装置 |
WO2024092940A1 (zh) * | 2022-10-31 | 2024-05-10 | 海尔优家智能科技(北京)有限公司 | 组件间的消息传递方法和装置、存储介质及电子装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101315609A (zh) | 实现单进程中组件间进行通信的装置和方法 | |
CN105472042B (zh) | Web端控制的消息中间件系统及其数据传送方法 | |
US8606859B2 (en) | Method and system to communicate messages in a computer network | |
CN101159711B (zh) | 自适应的实时消息订阅与发布系统及方法 | |
CN101651698B (zh) | 基于nio和io的面向发布订阅系统的传输方法 | |
CN109756559B (zh) | 面向嵌入式机载系统分布式数据分发服务的构建及使用方法 | |
CN102355413A (zh) | 一种大规模实时统一消息空间的方法及其系统 | |
WO2003094014A1 (en) | High availability event topic | |
CA2851249A1 (en) | Integrated software development and deployment architecture and high availability client-server systems generated using the architecture | |
CN101193078A (zh) | 用于管理订阅匹配的方法和系统 | |
CN101917394B (zh) | 在手机设备上进行数据共享的中间件系统及工作方法 | |
CN108769099A (zh) | 一种消息中间件的消息去重的实现方法 | |
CN109656726B (zh) | 一种适用于数据中心的工业信息交互系统及方法 | |
US20030018721A1 (en) | Unified messaging with separate media component storage | |
CN107231290A (zh) | 一种即时通信方法和系统 | |
WO2014086143A1 (zh) | 面向复杂生产过程管理系统的消息总线实现方法 | |
CN112711635A (zh) | 一种分布式物联设备跨区域数据一致性的方法和服务集群 | |
CN116382943A (zh) | 顺序消息处理方法、总线系统、计算机设备及存储介质 | |
CN109428745B (zh) | Jms消息转发方法、装置、电子设备和存储介质 | |
CN109302435A (zh) | 消息发布方法、装置、系统、服务器及计算机可读存储介质 | |
CN107193663A (zh) | 一种业务消息处理方法及装置 | |
CN107423131B (zh) | 一种共享方法及服务器 | |
US20140181233A1 (en) | System, messaging broker and method for managing communication between open services gateway initiative (osgi) environments | |
Goel et al. | Message-oriented-middleware in a distributed environment | |
CN115225482A (zh) | 一种基于Kubernetes进行Pod容器网络配置的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20081203 |