一种消息分发方法和装置制造方法及图纸

技术编号:12019141 阅读:222 留言:0更新日期:2015-09-09 16:13
本发明专利技术公开了一种消息分发方法和装置,其包括:接收消息生产者所创建的消息,并将所接收的消息写入消息数据库;获取消息订阅者的消息订阅范围,根据所述消息订阅范围确定所述消息数据库中的起始消息订阅点;从所述起始消息订阅点开始,将所述消息订阅者的消息订阅范围内的各条消息分发给所述消息订阅者。本发明专利技术实现了依据时间值和顺序值确定消息订阅者所获得的消息以及尚未获得的消息,实现了消息订阅者对订阅消息的续传和补传,以及对订阅消息的一致性检查,本发明专利技术同时针对多个消息订阅者仅使用一份消息数据库的拷贝,而不必为每个消息订阅者分别使用不同的消息数据的拷贝,进而节约了消息的存储资源。

【技术实现步骤摘要】

本专利技术涉及计算机通信领域技术,特别涉及一种消息分发方法和装置
技术介绍
JMS,即JavaMessageService,Java消息服务,是Java标准化组织(JCP)开 发的一种标准(代号为JSR914),它是一个Java平台中关于面向消息中间件(MOM)的 API(ApplicationProgrammingInterface,应用程序编程接口)。JMS用于在两个应用程 序之间,或分布式系统中发送消息,进行异步通信。 JMS提供了创建、发送、接收、读取消息的服务,JMS规范下有两种基本消息模型, 即PTP(点对点)和Pub/Sub(发布/订阅)。其中,Pub/Sub模型可以定义多个消费者消费 消息,它在企业级开发中广泛采用,方便了系统间消息的传递,省去了大量开发时间以及节 省了存储消息的资源空间。 JMS的Pub/Sub模型中,消息的订阅分发通常采用基于JMSTOPIC规范来实现。JMS TOPIC规范有两种实现方式,第一种是不提供存储而直接转发消息,第二种是为每个订阅者 提供缓存队列。 现有的基于JMS TOPIC规范的消息分发步骤如下: 1)消息发送方创建一条消息,并将该条消息发送给TopicManager(主题管理 器); 2)Topic Manager查询该条消息的所有订阅者; 3)将该条消息转发给其所有订阅者; 4)在预设时间周期后重复步骤1)~3)。 从上述现有的消息分发步骤来看,消息的订阅者不能指定开始订阅点,JMSTOPIC 规范只支持订阅者被动接收实时消息,不支持订阅者对历史消息的订阅。同时,对于订阅者 来说,消息的获得并不支持断点续传,当订阅者连接超时或者中断,并重新连接后,不能进 行断点续传,从上次成功订阅消息的时间点继续订阅消息。另外,JMSTOPIC规范也不支持 消息的核对,对于消息一致性要求很高的业务场景(例如财务数据,订单数据等)需要周期 性核对消息,而现有的JMSTOPIC规范不支持历史消息的查阅,因此无法核对历史消息的一 致性,当出现消息不一致的情况时也难以核查。 另外,虽然上述JMSTOPIC规范的两种实现方式中的后一种为每个订阅者提供了 缓存,但受限于缓存队列的深度,无法保证消息不丢失,同时因为针对每个订阅者分别提供 缓存,进而同时存储了多份消息拷贝,进而造成了对存储资源的浪费。
技术实现思路
有鉴于此,本专利技术提供一种消息分发方法和装置,以实现订阅消息的持久化和消 息订阅的记录功能,进而为消息订阅者提供可订阅消息范围的查询、订阅、以及断点续传等 服务。 本专利技术的技术方案是这样实现的: -种消息分发方法,包括: 接收消息生产者所创建的消息,并将所接收的消息写入消息数据库; 获取消息订阅者的消息订阅范围,根据所述消息订阅范围确定所述消息数据库中 的起始消息订阅点; 从所述起始消息订阅点开始,将所述消息订阅者的消息订阅范围内的各条消息分 发给所述消息订阅者。 进一步,将所接收的消息写入消息数据库时,在所述消息数据库中同时记录写入 消息时的时间值和写入的消息的顺序值。 进一步,根据所述消息订阅范围确定所述消息数据库中的起始消息订阅点包括: 根据所述消息订阅范围,在所述消息数据库中确定所述消息订阅范围内的最早写 入的消息,并将其作为所述起始消息订阅点。 进一步,从所述起始消息订阅点开始,将所述消息订阅者的消息订阅范围内的各 条消息分发给所述消息订阅者,包括: 依据所述时间值和顺序值,将所述消息订阅者的消息订阅范围内的各条消息逐条 分发给所述消息订阅者。 进一步,在将所述消息订阅者的消息订阅范围内的各条消息逐条分发给所述消息 订阅者的同时,将所分发的各条消息的时间值和顺序值同时发送给所述消息订阅者; 当连接中断或者所述消息订阅者所接收的消息丢失时,将最近一次成功分发的消 息作为新的起始消息订阅点,并从所述新的起始消息订阅点开始,将所述消息订阅者的消 息订阅范围内尚未分发的各条消息分发给所述消息订阅者。 进一步,若消息订阅者的消息订阅范围的最晚时间晚于当前时间,且当所述消息 数据库中的所有消息订阅范围内的消息全部分发给所述消息订阅者时,等待消息数据库中 写入新消息,并将写入的新消息分发给消息订阅者。 进一步,当所述消息数据库的存储容量不足时,依据所述时间值和顺序值,逐条删 除最早写入所述消息数据库的消息。 进一步,所述方法还包括: 设置清理周期,在每个清理周期中,依据所述时间值和顺序值,逐条删除最早写入 所述消息数据库的消息。 进一步,所述方法还包括: 设置所述消息数据库的数据量阈值,所述数据量阈值小于所述消息数据库的存储 容量; 在删除最早写入所述消息数据库的消息时,当所述消息数据库的数据量降到所述 数据量阈值时,停止继续对所述消息数据库中消息的删除。 一种消息分发装置,包括:消息接收模块,用于接收消息生产者所创建的消息,并将所接收的消息写入消息 数据库; 消息订阅模块,用于获取消息订阅者的消息订阅范围,根据所述消息订阅范围确 定所述消息数据库中的起始消息订阅点; 消息分发模块,用于从所述起始消息订阅点开始,将所述消息订阅者的消息订阅 范围内的各条消息分发给所述消息订阅者;以及, 消息数据库,用于存储所述消息。进一步,所述消息接收模块,还用于将所接收的消息写入消息数据库时,在所述消 息数据库中同时记录写入消息时的时间值和写入的消息的顺序值。进一步,所述消息订阅模块根据所述消息订阅范围,在所述消息数据库中确定所 述消息订阅范围内的最早写入的消息,并将其作为所述起始消息订阅点。进一步,所述消息分发模块依据所述时间值和顺序值,将所述消息订阅者的消息 订阅范围内的各条消息逐条分发给所述消息订阅者。进一步,在将所述消息订阅者的消息订阅范围内的各条消息逐条分发给所述消息 订阅者的同时,所述消息分发模块将所分发的各条消息的时间值和顺序值同时发送给所述 消息订阅者; 当连接中断或者所述消息订阅者所接收的消息丢失时:所述消息订阅模块将最近一次成功分发的消息作为新的起始消息订阅点;当前第1页1 2 3 4 本文档来自技高网
...

【技术保护点】
一种消息分发方法,包括:接收消息生产者所创建的消息,并将所接收的消息写入消息数据库;获取消息订阅者的消息订阅范围,根据所述消息订阅范围确定所述消息数据库中的起始消息订阅点;从所述起始消息订阅点开始,将所述消息订阅者的消息订阅范围内的各条消息分发给所述消息订阅者。

【技术特征摘要】

【专利技术属性】
技术研发人员:许文靖
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1