一种消息的发送方法和系统的制作方法

文档序号:7886749阅读:156来源:国知局
专利名称:一种消息的发送方法和系统的制作方法
技术领域
本发明涉及通信技术领域,尤其涉及一种消息的发送方法和系统。
背景技术
现有大多系统都需要与外部系统进行数据交互,这种交互多以消息的方式进行,其处理流程如图1所示,该处理流程包括以下几个步骤:消息产生,消息通常在系统在处理业务流程时产生需要交互的数据;消息加工处理,消息加工处理会根据消息接收方和协议的不同,对消息进行包装,成为对方能接收的数据格式;消息发送,消息加工过后,只需要根据协议(比如JMS、FTP、HTTP等)进行发送即可。以上流程从消息产生到消息加工处理,再到消息发送是串行的,它们之间是有依赖关系的,目如最接近的技术方案有两种:单线程消息发送方式:如图2A所示,采用单线程发送消息,从消息的产生到加工处理再到发送是严格的串行处理,而且只有当消息发送完成之后才能进行下一个任务处理。这种实现方式实现起来比较简单,但缺点非常明显,第一是当系统的消息发送量非常大时,系统会遇到性能瓶颈;第二是当消息发送过程中出现一些堵塞或者延时时,直接影响到系统业务流程的正常运作;多线程消息发送方式:如图2B所示,采用多线程发送消息,把消息产生到加工处理再到发送的过程看成一个消息发送事务,通过管理一组线程,每个线程处理一个消息发送事务,从而提高系统的并发性能。这种处理方式的优点是性能较高,能充分利用系统的并发性能;但对于消息发送过程中遇到的异常问题,此方式不能很好地处理。对于一个具有高并发和高吞吐量的系统如果多个环节放在一个事务中执行会带来以下几方面的问题:1.由于串行执行方式受限于单线程使用,在同样机器配置下,系统性能无法进一步提闻;2.采用多线程并发处理时,每个线程本身是一个完整的发送事务,但对于系统来说,消息的产生和消息发送对系统的要求是不一样的,放在同一个发送事务中,不利于系统资源的利用,也不利于扩展;3.由于消息的产生和发送在同一个事务中,对于部署在不同机器上的模块不能共享消息的发送机制;4.由于消息的产生和发送没有分离,当消息发送遇到如网络堵塞和网络延迟时,会直接影响系统的业务流程,对系统稳定性造成较大的影响。

发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种消息的发送方法,能有效利用系统资源,利于扩展,能共享消息的发送机制、且稳定性高。本发明解决其技术问题所采用的技术方案是:构造一种消息的发送方法,包括:S1.至少一个消息生产模块分别产生消息,并将所产生的消息及所述消息所对应的标识进行存储,同时,向消息采集模块发送通知,所述通知包括所述消息的标识;S2.消息采集模块接收到所述通知后进行唤醒,且根据所述通知中的所述标识采集相应的消息,并将所采集的消息进行处理后放入阻塞队列;S3.至少一个消息发送模块分别通过阻塞机制不断从阻塞队列中获取消息,并对所获取的消息进行组装,且根据所述消息中包含的协议标识对组装后的消息进行协议转换和适配,然后调用协议网关将所述消息发送到目的地;其中,所述至少一个消息发送模块独立于所述至少一个消息生产模块。在本发明所述的消息的发送方法中,在所述步骤SI中,所产生的消息及所述消息所对应的标识存储在数据库中。在本发明所述的消息的发送方法中,消息采集模块通过轮询的方式从数据库中获取消息。在本发明所述的消息的发送方法中,在消息发送完成后,消息发送模块将发送时间、发送正常或异常发送至数据库中,以进行记录。在本发明所述的消息的发送方法中,在发送异常时,通过计数器设置重发次数,并提供消息的重发机制。在本发明所述的消息的发送方法中,在所述步骤S2中,通过调用相应的配置模板来对所采集的消息进行处理。在本发明所述的消息的发送方法中,预先分别将所述消息生产模块、所述消息采集模块和所述消息发送模块封装成相应的API接口。本发明还构造一种消息的发送系统,包括至少一个消息生产模块、消息采集模块和至少一个消息发送模块,且所述至少一个消息发送模块独立于所述至少一个消息生产模块,其中,所述至少一个消息生产模块,分别用于产生消息,并将所产生的消息及所述消息所对应的标识进行存储,同时,向消息采集模块发送通知,所述通知包括所述消息的标识;所述消息采集模块,用于在接收到所述通知后进行唤醒,且根据所述通知中的所述标识采集相应的消息,并将所采集的消息进行处理后放入阻塞队列;所述至少一个消息发送模块,分别用于通过阻塞机制不断从阻塞队列中获取消息,并对所获取的消息进行组装,且根据所述消息中包含的协议标识对组装后的消息进行协议转换和适配,然后调用协议网关将所述消息发送到目的地。在本发明所述的消息的发送系统中,所述消息采集模块通过调用相应的配置模板来对所采集的消息进行处理。在本发明所述的消息的发送系统中,在消息发送完成后,所述消息发送模块还用于将发送时间、发送正常或异常发送至数据库中,以进行记录。实施本发明的技术方案,有以下有益效果:首先,对消息的产生和消息的发送进行了解耦合,使得消息的产生和发送之间相互不干扰,不会导致消息发送异常时影响业务流程;其次,基于生产者(消息生产模块)_消费者(消息发送模块)模式的多线程并发处理技术,减少了系统资源的消耗;再者,可以通过调节两个消息的产生和消息的发送之间的线程数来提高系统的性能,利于扩展;最后,生产与消费(发送)之间采用了阻塞队列,使得生产线程与消费线程之间不会因为竞争而出现死锁。另外,消息生产模块提供了可编程的API,使得系统可以通过水平扩展的方式把其他子系统集成进来,共享相同的消息发送机制。消息发送模块提供了可编程API,使得系统可以通过水平扩展的方式提高系统整个系统的消息处理能力和消息发送吞吐量。消息采集时通过模板技术对消息进行加工处理,使得消息的生成机制更灵活。消息发送时支持多种协议适配,同时提供了灵活的新协议的扩展机制。


下面将结合附图及实施例对本发明作进一步说明,附图中:图1是现有的消息处理流程的示意图;图2A是现有技术的一种消息发送的示意图;图2B是现有技术的另一种消息发送的示意图;图3是本发明消息的发送方法实施例一的流程图;图4是本发明消息的发送方法实施例二的流程图;图5是本发明消息的发送系统实施例一的逻辑图;图6是本发明消息的发送系统实施例二的逻辑图;图7是本发明消息的发送框架实施例一的示意图。
具体实施例方式如图3所示,在本发明消息的发送方法实施例一的流程图中,该发送方法包括:S1.至少一个消息生产模块分别产生消息,并将所产生的消息及所述消息所对应的标识进行存储,同时,向消息采集模块发送通知,所述通知包括所述消息的标识。在该步骤中,优选地,可将所产生的消息及其所对应的标识存储至数据库中,等待消息采集模块来采集消息,当然也可以采用其它机制来保存消息;S2.消息采集模块接收到所述通知后进行唤醒,且根据所述通知中的所述标识采集相应的消息,并将所采集的消息进行处理后放入阻塞队列。在该步骤中,需说明的是,通过采用消息通知机制来唤醒消息采集模块,可避免消息采生产模块在没有产生消息时消息采集模块频繁访问数据库。另外,优选地,消息采集模块还可结合轮询方式从数据库中获取消息,消息采集模块可根据最优策略来读取数据库中的消息,从而有效控制系统资源的利用;S3.至少一个消息发送模块分别通过阻塞机制不断从阻塞队列中获取消息,并对所获取的消息进行组装,且根据所述消息中包含的协议标识对组装后的消息进行协议转换和适配,然后调用协议网关将所述消息发送到目的地;其中,所述至少一个消息发送模块独立于所述至少一个消息生产模块。实施该实施例的技术方案,由于消息的发送是基于生产者-消费者模式构建的,生产者(消息生产模块)只负责生产消息,可以为系统解耦合提供了前提条件,消费者(消息发送模块)只负责消费消息,它们彼此独立,并且通过两组线程池来分别完成工作,通过一个阻塞队列来交互数据,保证多个消费者不会拿到同一个消息。当消息的消费速度大于产生的速度时,可以通过增大生产者的线程数量来达到平衡,反之亦然。由于消息的产生和发送(消费)相分离,这样,消息的产生可能来源于不能的子系统,不同的物理机器,但最终可以汇集在一起,统一管理,统一发送,并且消息在发送时可以根据不同的协议,不同的目标源进行定制化处理。图4是本发明消息的发送方法实施例二的流程图,首先说明的是,该实施例中消息生产模块及消息发送模块的数量的分别为一个,但应理解,可根据实际需要,增大消息生产模块的数量或增加消息发送模块的数量。该消息的发送方法为:消息生产模块首先产生消息,把所产生的消息存入数据库,以等待后续处理,同时,向消息采集模块发送一个通知,消息采集模块收到通知后会被唤醒,并且根据通知中带有的消息标识向数据库采集相应的消息,当消息采集模块接收到数据库所返回的相应消息后,会对所采集的消息进行初步的格式匹配,例如,通过xml模板机制,调用相应的配置模板对消息进行加工处理,并将处理后的数据放入阻塞队列中,然后回到等待状态,等下一次的唤醒。接着,消息发送模块根据阻塞原理从阻塞队列中获取消息,并对所获取的消息进行组装,再调用相应的协议适配器对组装后的消息进行协议转换和适配,比如JMS、WEBSERVICE、FTP、HTTP等,然后调用相应的协议网关将消息发送到目的地。完成消息发送后,消息发送模块会进一步处理消息发送后的消息,这些消息会记录在数据中,比如发送时间、发送正常或异常发送至数据库,以进行记录。另外,在发送异常,还可通过计数器设置对消息的重发次数,提供消息重发机制。图5是本发明消息的发送系统实施例一的逻辑图,该消息的发送系统包括三个消息生产模块11、12、13、消息米集模块20和消息发送模块30,且所述消息发送模块30独立于消息生产模块11、12、13。当然这只是本发明的一个具体实施例,在其它实施例中,根据实际需要,消息生产模块可为其它任意数量,或者,消息发送模块可为其它任意数量。在该实施例中,消息生产模块11、12、13分别用于产生消息,并将所产生的消息及所述消息所对应的标识进行存储,同时,向消息采集模块20发送通知,所述通知包括待采集消息的标识;消息采集模块20用于在接收到所述通知后进行唤醒,且根据所述通知中的所述标识采集相应的消息,并将所采集的消息进行处理后放入阻塞队列;消息发送模块30用于通过阻塞机制不断从阻塞队列中获取消息,并对所获取的消息进行组装,且根据所述消息中包含的协议标识对组装后的消息进行协议转换和适配,然后调用协议网关把所述消息发送到目的地。图6是本发明消息的发送系统实施例二的逻辑图,在该实施例中,优选地,消息生产模块11、12、13分别产生消息,并将所产生的消息及所述消息所对应的标识存储至数据库中,同时,向消息采集模块20发送通知,所述通知包括待采集消息的标识。消息采集模块20在接收到所述通知后进行唤醒,且根据所述通知中的所述标识从数据库中采集相应的消息,在从数据库中采集到相应消息后,通过调用相应的配置模板来对所采集的消息进行处理,然后将处理后的消息放入阻塞队列。消息发送模块30用于通过阻塞机制不断从阻塞队列中获取消息,并对所获取的消息进行组装,且根据所述消息中包含的协议标识调用相应的协议适配器,并对组装后的消息进行协议转换和适配,然后调用协议网关把所述消息发送到目的地。在发送完成后,消息发送模块30还将发送时间、发送正常或异常发送至数据库中进行记录,另外,在发送异常时,通过计数器设置重发次数,并提供消息的重发机制。另外,在一个优选实施例中,可将本发明中实现消息的发送的组件进行插件化设计,即,预先分别将消息生产模块、消息采集模块和消息发送模块封装成相应的API (Application Programming Interface,应用程序编程接口)接口,这样可为应用层提供简洁的API,只需通过简单的第三方库引用的方式即可实现消息的发送功能,大大简化了项目集成功能模块的成本。图7是本发明消息的发送框架实施例一的示意图,该框架提供的回调接口原型如下,优选JAVA描述,这样具有跨平台特性,支持多种系统平台:1.消息入口处理API
方法原型I deal
权利要求
1.一种消息的发送方法,其特征在于,包括: 51.至少一个消息生产模块分别产生消息,并将所产生的消息及所述消息所对应的标识进行存储,同时,向消息采集模块发送通知,所述通知包括所述消息的标识; 52.消息采集模块接收到所述通知后进行唤醒,且根据所述通知中的所述标识采集相应的消息,并将所采集的消息进行处理后放入阻塞队列; 53.至少一个消息发送模块分别通过阻塞机制不断从阻塞队列中获取消息,并对所获取的消息进行组装,且根据所述消息中包含的协议标识对组装后的消息进行协议转换和适配,然后调用协议网关将所述消息发送到目的地;其中,所述至少一个消息发送模块独立于所述至少一个消息生产模块。
2.根据权利要求1所述的消息的发送方法,其特征在于,在所述步骤SI中,所产生的消息及所述消息所对应的标识存储在数据库中。
3.根据权利要求2所述的消息的发送方法,其特征在于,消息采集模块通过轮询的方式从数据库中获取消息。
4.根据权利要求2所述的消息的发送方法,其特征在于,在消息发送完成后,消息发送模块将发送时间、发送正常或异常发送至数据库中,以进行记录。
5.根据权利要求4所述的消息的发送方法,其特征在于,在发送异常时,通过计数器设置重发次数,并提供消息的重发机制。
6.根据权利要求1所述的消息的发送方法,其特征在于,在所述步骤S2中,通过调用相应的配置模板来对所采集的消息进行处理。
7.根据权利要求1所述的消息的发送方法,其特征在于,预先分别将所述消息生产模块、所述消息采集模块和所述消息发送模块封装成相应的API接口。
8.一种消息的发送系统,其特征在于,包括至少一个消息生产模块、消息采集模块和至少一个消息发送模块,且所述至少一个消息发送模块独立于所述至少一个消息生产模块,其中, 所述至少一个消息生产模块,分别用于产生消息,并将所产生的消息及所述消息所对应的标识进行存储,同时,向消息采集模块发送通知,所述通知包括所述消息的标识; 所述消息采集模块,用于在接收到所述通知后进行唤醒,且根据所述通知中的所述标识采集相应的消息,并将所采集的消息进行处理后放入阻塞队列; 所述至少一个消息发送模块,分别用于通过阻塞机制不断从阻塞队列中获取消息,并对所获取的消息进行组装,且根据所述消息中包含的协议标识对组装后的消息进行协议转换和适配,然后调用协议网关将所述消息发送到目的地。
9.根据权利要求8所述的消息的发送系统,其特征在于,所述消息采集模块通过调用相应的配置模板来对所采集的消息进行处理。
10.根据权利要求9所述的消息的发送系统,其特征在于,在消息发送完成后,所述消息发送模块还用于将发送时间、发送正常或异常发送至数据库中,以进行记录。
全文摘要
本发明公开了一种消息的发送方法和系统,该方法包括至少一个消息生产模块分别产生消息,并将所产生的消息及消息所对应的标识进行存储,向消息采集模块发送通知;消息采集模块接收到通知后进行唤醒,且根据通知中的标识采集相应的消息,并放入阻塞队列;至少一个消息发送模块分别通过阻塞机制不断从阻塞队列中获取消息,并对所获取的消息进行组装,且根据消息中包含的协议标识对组装后的消息进行协议转换和适配,然后调用协议网关将消息发送到目的地;其中,至少一个消息发送模块独立于至少一个消息生产模块。实施本发明的技术方案,不会导致消息发送异常时影响业务流程,减少了系统资源的消耗,而且利于扩展,不会因为竞争而出现死锁。
文档编号H04L1/18GK103199968SQ201210004309
公开日2013年7月10日 申请日期2012年1月9日 优先权日2012年1月9日
发明者廖炳才, 黄玉标, 郝明立 申请人:卓望数码技术(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1