CN108769099A - 一种消息中间件的消息去重的实现方法 - Google Patents
一种消息中间件的消息去重的实现方法 Download PDFInfo
- Publication number
- CN108769099A CN108769099A CN201810288150.5A CN201810288150A CN108769099A CN 108769099 A CN108769099 A CN 108769099A CN 201810288150 A CN201810288150 A CN 201810288150A CN 108769099 A CN108769099 A CN 108769099A
- Authority
- CN
- China
- Prior art keywords
- message
- oriented middleware
- consumer
- duplicate removal
- method described
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1074—Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
- H04L67/1078—Resource delivery mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-based network services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
一种消息中间件的消息去重的实现方法,所述方法包括:采用Redis的列表结构作为消息中间件的消息队列;创建生产者***和消费者***的订阅模型;采用Redis的集合存放已存在消息的标识,当消息中间件收到新消息时,根据消息的主题,在对应的集合中查询该消息的标识是否已存在,若存在则忽略所述消息,若不存在则将所述消息追加入所述消息队列中。
Description
技术领域
本发明涉及消息处理技术领域,更具体地,涉及一种消息中间件的消息去重的实现方法。
背景技术
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式***的集成,通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
在生产者消费者场景中,消息中间件的三大要素为:生产者、消息、消费者。其中生产者生产消息,并将消息通过消息中间件发送给消息中间件去消费。消息中间件作为消息的中间方,负责维护消费者的主题订阅关系,同时负责接受消息生产方发来的消息,并根据消息主题向消费者推送消息。传统的消息中间件如Kafka等,在某些需求场景下,并不能很好的满足***需求。比如消息去重的场景,这种场景下消费方不希望重复消费同样的消息。
Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的应用程序编程接口(API)。Redis支持存储的数值类型很多,包括字符串(string)、列表(list)、集合(set)、有序集合(zset)和哈希类型(hash)。Redis也可以作为消息中间件,然而,现有技术中并没有基于Redis的具有消息去重功能的消息中间件。
发明内容
针对上述问题中的至少一个,根据本发明的一个方面,本发明提供了一种消息中间件的消息去重的实现方法,所述方法包括:
采用Redis的列表结构作为消息中间件的消息队列;
创建生产者***和消费者***的订阅模型;
采用Redis的集合存放已存在消息的标识(id),当消息中间件收到新消息时,根据消息的主题,在对应的集合中查询该消息的标识(id)是否已存在,若存在则忽略所述消息,若不存在则将所述消息追加入所述消息队列中。
其中,所述消息中间件以超文本传输协议(HTTP)服务为载体,消费者和生产者通过调用所述消息中间件的应用程序编程接口(API)进行消息的发送和获取。
其中,消费者通过调用所述消息中间件的应用程序编程接口(API)来向所述消息中间件注册订阅关系。
在一些实施例中,所述订阅模型的属性包括:
消费者的接受订阅消息地址;
消费者可接受的消息报文结构;
消费者订阅的主题;
消费失败的处理策略。
在一些实施例中,所述消息中间件收到消息后,扫描Redis消息队列,根据所述订阅模型,取出消费者订阅的主题对应的消息,并根据消费者可接受的消息报文结构对发送报文进行处理。
在一些实施例中,所述消息中间件对发送报文进行处理后,尝试调用消费者接受消息的应用程序编程接口(API),若消费成功,则将消息推送给消费者;若消费失败,则根据配置的消费失败的处理策略进行处理。
在一些实施例中,所述订阅模型的属性还包括:消息是否去重推送;若设定为消息去重推送,则根据所述消息去重机制对消息进行去重处理。
其中,将消息追加入所述消息队列中时,将消息加入所述消息队列的最左端。所述消息中间件取出消息推送给消费者时,从所述消息队列最右端弹出消息。
本发明另一方面提供了一种根据如前所述的方法实现消息去重的消息中间件。
基于上述技术方案可知,本发明取得了如下有益效果中的至少一个:
本发明提出的一种消息中间件的消息去重的实现方法,使得消息能够高效、精准的在消息中间件侧进行消息去重,减轻了消费者***的计算压力,也使消息中间件的各个职能***职责更明确,交互效率更高。
附图说明
图1为根据本发明的一个实施例的消息中间件的消息去重的工作流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另外定义,本发明使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。
根据本发明的一方面,提供了一种消息中间件的消息去重的实现方法,所述方法包括:
采用Redis的列表(List)结构作为消息中间件的消息队列;
创建生产者***和消费者***的订阅模型;
采用Redis的集合(Set)存放已存在消息的标识(id),当消息中间件收到新消息时,根据消息的主题,在对应的集合中查询该消息的标识(id)是否已存在,若存在则忽略这条消息,若不存在则将消息追加入消息队列中。其中,将消息追加入消息队列中时,将消息加入消息队列的最左端。消息中间件取出消息推送给消费者时,从消息队列的最右端弹出消息。
其中,消息中间件以超文本传输协议(HTTP)服务为载体,消费者和生产者通过调用消息中间件的应用程序编程接口(API)进行消息的发送和获取。消费者通过调用消息中间件的应用程序编程接口(API)来向消息中间件注册订阅关系。
在一些实施例中,订阅模型的属性包括:
消费者的接受订阅消息地址;
消费者可接受的消息报文结构;
消费者订阅的主题;
消费失败的处理策略。
在一些实施例中,消息中间件收到消息后,扫描Redis消息队列,根据订阅模型,取出消费者订阅的主题对应的消息,并根据消费者可接受的消息报文结构对发送报文进行处理。
在一些实施例中,消息中间件对发送报文进行处理后,尝试调用消费者接受消息的应用程序编程接口(API),若消费成功,则将消息推送给消费者;若消费失败,则根据配置的消费失败的处理策略进行处理。
在一些实施例中,订阅模型的属性还包括:消息是否去重推送;若设定为消息去重推送,则根据消息去重机制对消息进行去重处理。
本发明另一方面提供了一种根据如前所述的方法实现的消息中间件。
下面结合附图对本发明的一个具体实施例做进一步的详细描述。图1为根据本发明的一个实施例的消息中间件的消息去重的工作流程图,其具体步骤如下。
S1,消费者向消息中间件注册订阅关系。
本实施例中,消息中间件基于Redis数据库,采用Redis的列表(List)结构充当消息队列。本实施例中的消息中间件以超文本传输协议(HTTP)服务为载体,消费者通过调用消息中间件的应用程序编程接口(API)来向消息中间件注册订阅关系。
因Redis具有卓越的性能和便易的客户端应用程序编程接口(API),消费者和生产者可以灵活地调用消息中间件的应用程序编程接口(API)进行消息的发送和获取。
本实施例中,生产者***和消费者***的订阅模型包括以下属性:
(1)消费者的接受订阅消息地址;
(2)消费者可接受的消息报文结构;
(3)消费者订阅的主题;
(4)消费失败的处理策略;
(5)消息是否去重推送。
本实施例中,上述订阅模型中的(5)设定为消息去重推送,后续步骤中将根据消息去重机制对消息进行去重处理。
S2、生产者将消息发送给消息中间件。
本实施例中,生产者将消息发送给消息中间件后,消息中间件根据上述的订阅模型进行处理,以下为去重处理以外的处理方式。
本实施例中,消息中间件根据收到的消息,扫描Redis消息队列,根据上述订阅模型中的(3),取出消费者订阅的主题对应的消息;并根据上述订阅模型中的(2),将发送报文处理为消费者可接受的消息报文结构。接着根据上述订阅模型中的(1),尝试调用消费者接受消息的应用程序编程接口(API),若消费成功,则本次消息推送成功;若消费失败,则根据上述订阅模型中的(4),即消费失败的处理策略来处理。例如,消费失败的处理策略可以为不处理或者消息重发。
S3、消息中间件去Redis的集合(Set)中进行查重。
本实施例中,消息查重的原理是同样的消息都有唯一的标识(id),每个消息队列的键(key)都对应一个集合,采用Redis的集合(Set)数据结构存放已存在消息的标识(id),当消息中间件收到新消息时,根据消息的主题,在该主题对应的集合(Set)中查询该消息的标识(id)是否已存在,若已存在则转入步骤S4a,否则转入步骤S4b。
本实施例中,采用Redis的SISMEMBER命令进行查重,如:
SISMEMBER key val
该命令的作用是查询值val是否为集合中的一员,如果是返回1,否则返回0。
本实施例中采用Redis的集合(Set)数据结构对消息标识(id)进行保存,Redis的集合(Set)结构的SISMEMBER命令的时间复杂度是O(1),因此无论这个集合(Set)中有多少个元素,查重操作总是一个基本操作,使得消息能够高效、精准的在消息中间件侧进行消息去重,减轻了消费者***的计算压力,也使消息中间件的各个职能***职责更明确,交互效率更高。
S4a、中间件不对消息进行处理。
即不将重复的消息发送给消费者,完成消息的去重。
S4b、将消息队列加入Redis中。
本实施例中,消息采用LPUSH命令加入队列的最左端,如:
LPUSH key val
S5b、消息中间件将消息推送给消费者,完成消息的去重推送。
本实施例中,消息中间件取出消息推送给消费者的时,采用RPOP命令从队列最右端弹出消息,如:
RPOP key
本实施例中,利用了Redis队列的先入先出(FIFO)特性,可以保障消息的消费顺序和生产顺序一致。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种消息中间件的消息去重的实现方法,所述方法包括:
采用Redis的列表结构作为消息中间件的消息队列;
创建生产者***和消费者***的订阅模型;
采用Redis的集合存放已存在消息的标识,当消息中间件收到新消息时,根据消息的主题,在对应的集合中查询该消息的标识是否已存在,若存在则忽略所述消息,若不存在则将所述消息追加入所述消息队列中。
2.根据权利要求1所述的方法,其中,所述消息中间件以超文本传输协议服务为载体,消费者和生产者通过调用所述消息中间件的应用程序编程接口进行消息的发送和获取。
3.根据权利要求2所述的方法,其中,消费者通过调用所述消息中间件的应用程序编程接口来向所述消息中间件注册订阅关系。
4.根据权利要求1所述的方法,其中,所述订阅模型的属性包括:
消费者的接受订阅消息地址;
消费者可接受的消息报文结构;
消费者订阅的主题;
消费失败的处理策略。
5.根据权利要求4所述的方法,还包括,所述消息中间件收到消息后,扫描Redis消息队列,根据所述订阅模型,取出消费者订阅的主题对应的消息,并根据消费者可接受的消息报文结构对发送报文进行处理。
6.根据权利要求5所述的方法,还包括,所述消息中间件对发送报文进行处理后,尝试调用消费者接受消息的应用程序编程接口,若消费成功,则将消息推送给消费者;若消费失败,则根据配置的消费失败的处理策略进行处理。
7.根据权利要求4所述的方法,所述订阅模型的属性还包括:消息是否去重推送;若设定为消息去重推送,则根据所述方法对消息进行去重处理。
8.根据权利要求1所述的方法,将消息追加入所述消息队列中时,将消息加入所述消息队列的最左端。
9.根据权利要求1所述的方法,所述消息中间件取出消息推送给消费者时,从所述消息队列的最右端弹出消息。
10.一种根据权利要求1-9中任一项所述的方法实现消息去重的消息中间件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810288150.5A CN108769099B (zh) | 2018-04-02 | 2018-04-02 | 一种消息中间件的消息去重的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810288150.5A CN108769099B (zh) | 2018-04-02 | 2018-04-02 | 一种消息中间件的消息去重的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108769099A true CN108769099A (zh) | 2018-11-06 |
CN108769099B CN108769099B (zh) | 2021-09-07 |
Family
ID=63980793
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810288150.5A Active CN108769099B (zh) | 2018-04-02 | 2018-04-02 | 一种消息中间件的消息去重的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108769099B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109445965A (zh) * | 2018-11-07 | 2019-03-08 | 北京明朝万达科技股份有限公司 | 由Redis和MySQL实现的消息处理方法和设备 |
CN110225118A (zh) * | 2019-06-13 | 2019-09-10 | 浪潮软件股份有限公司 | 实现消息一次送达的消息中间件辅助***及消息传送*** |
CN110232054A (zh) * | 2019-06-19 | 2019-09-13 | 北京百度网讯科技有限公司 | 日志传输***及流式日志传输方法 |
CN110505315A (zh) * | 2019-09-27 | 2019-11-26 | 北京锐安科技有限公司 | 数据处理方法、装置、设备及存储介质 |
CN110572461A (zh) * | 2019-09-11 | 2019-12-13 | 宝付网络科技(上海)有限公司 | 一种基于生产与消费模式的中间服务*** |
CN111859068A (zh) * | 2020-07-02 | 2020-10-30 | 中移(杭州)信息技术有限公司 | 报文跟踪方法、装置、服务器、存储介质 |
CN112597249A (zh) * | 2020-12-26 | 2021-04-02 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种业务数据的同步分发存储方法及*** |
CN112637046A (zh) * | 2020-12-18 | 2021-04-09 | 北京房天下嘉居网络技术有限公司 | 消息推送方法及路由装置 |
CN113360487A (zh) * | 2021-06-03 | 2021-09-07 | 上海微盟企业发展有限公司 | 一种消息去重方法及相关装置 |
CN113542314A (zh) * | 2020-04-13 | 2021-10-22 | 烽火通信科技股份有限公司 | 一种基于关键字过滤的订阅模式实现方法及*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104463259A (zh) * | 2013-09-22 | 2015-03-25 | 何阳 | 基于rfid中间件的图书馆管理*** |
WO2015162225A1 (fr) * | 2014-04-23 | 2015-10-29 | Bouygues Telecom | Procédés d'échange de données avec un équipement comprenant des moyens de communication radio |
CN106293968A (zh) * | 2016-08-04 | 2017-01-04 | 华中科技大学 | 一种基于Kafka消息中间件的双向通信***及方法 |
CN107026917A (zh) * | 2017-06-16 | 2017-08-08 | 智者四海(北京)技术有限公司 | 用于消息推送的方法及*** |
CN108965355A (zh) * | 2017-05-18 | 2018-12-07 | 北京京东尚科信息技术有限公司 | 用于数据传输的方法、装置及计算机可读存储介质 |
-
2018
- 2018-04-02 CN CN201810288150.5A patent/CN108769099B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104463259A (zh) * | 2013-09-22 | 2015-03-25 | 何阳 | 基于rfid中间件的图书馆管理*** |
WO2015162225A1 (fr) * | 2014-04-23 | 2015-10-29 | Bouygues Telecom | Procédés d'échange de données avec un équipement comprenant des moyens de communication radio |
CN106293968A (zh) * | 2016-08-04 | 2017-01-04 | 华中科技大学 | 一种基于Kafka消息中间件的双向通信***及方法 |
CN108965355A (zh) * | 2017-05-18 | 2018-12-07 | 北京京东尚科信息技术有限公司 | 用于数据传输的方法、装置及计算机可读存储介质 |
CN107026917A (zh) * | 2017-06-16 | 2017-08-08 | 智者四海(北京)技术有限公司 | 用于消息推送的方法及*** |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109445965B (zh) * | 2018-11-07 | 2021-06-22 | 北京明朝万达科技股份有限公司 | 由Redis和MySQL实现的消息处理方法和设备 |
CN109445965A (zh) * | 2018-11-07 | 2019-03-08 | 北京明朝万达科技股份有限公司 | 由Redis和MySQL实现的消息处理方法和设备 |
CN110225118A (zh) * | 2019-06-13 | 2019-09-10 | 浪潮软件股份有限公司 | 实现消息一次送达的消息中间件辅助***及消息传送*** |
CN110232054A (zh) * | 2019-06-19 | 2019-09-13 | 北京百度网讯科技有限公司 | 日志传输***及流式日志传输方法 |
CN110232054B (zh) * | 2019-06-19 | 2021-07-20 | 北京百度网讯科技有限公司 | 日志传输***及流式日志传输方法 |
CN110572461A (zh) * | 2019-09-11 | 2019-12-13 | 宝付网络科技(上海)有限公司 | 一种基于生产与消费模式的中间服务*** |
CN110505315A (zh) * | 2019-09-27 | 2019-11-26 | 北京锐安科技有限公司 | 数据处理方法、装置、设备及存储介质 |
CN113542314A (zh) * | 2020-04-13 | 2021-10-22 | 烽火通信科技股份有限公司 | 一种基于关键字过滤的订阅模式实现方法及*** |
CN111859068A (zh) * | 2020-07-02 | 2020-10-30 | 中移(杭州)信息技术有限公司 | 报文跟踪方法、装置、服务器、存储介质 |
CN112637046A (zh) * | 2020-12-18 | 2021-04-09 | 北京房天下嘉居网络技术有限公司 | 消息推送方法及路由装置 |
CN112597249A (zh) * | 2020-12-26 | 2021-04-02 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种业务数据的同步分发存储方法及*** |
CN112597249B (zh) * | 2020-12-26 | 2023-06-20 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种业务数据的同步分发存储方法及*** |
CN113360487A (zh) * | 2021-06-03 | 2021-09-07 | 上海微盟企业发展有限公司 | 一种消息去重方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108769099B (zh) | 2021-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108769099A (zh) | 一种消息中间件的消息去重的实现方法 | |
CN101246486B (zh) | 用于改进的表达式处理的方法和装置 | |
CN102469033B (zh) | 一种消息订阅***以及消息发送方法 | |
CN111787066A (zh) | 一种基于大数据、ai的物联网数据平台 | |
CN1134934C (zh) | 用于根据客户特殊请求分发连续媒体内容的***及方法 | |
CN112507029B (zh) | 数据处理***及数据实时处理方法 | |
US7640263B2 (en) | Queued system event notification and maintenance | |
CN108023908A (zh) | 数据更新方法、装置及*** | |
CN104579905B (zh) | 消息传递方法和***及mom服务器、接收端 | |
CN101174955B (zh) | 共享内容传输方法和***以及内容源端、内容接收端 | |
CN104486440A (zh) | 一种基于消息总线的云计算管理软件交互方法 | |
CN109918349A (zh) | 日志处理方法、装置、存储介质和电子装置 | |
MX2008012378A (es) | Estructura de agregacion de mensaje basado en politica. | |
CN101917394B (zh) | 在手机设备上进行数据共享的中间件***及工作方法 | |
CN108306852B (zh) | 一种基于简单二进制编码的消息中间件***和方法 | |
CN112788074A (zh) | 数据发送方法、处理方法、接收方法及其设备、存储介质 | |
CN102890631A (zh) | 基于持久化消息队列传输消息的方法及消息传输装置 | |
CN107741884B (zh) | 一种分层状态机实现消息推送的方法和装置 | |
CN108255621A (zh) | 一种基于binlog的MySQL增量消息解析方法 | |
CN103458384A (zh) | 一种企业短信息发送***及方法 | |
CN112181678A (zh) | 业务数据的处理方法、装置和***、存储介质、电子装置 | |
CN104933202A (zh) | 一种数据抽取、转换、加载etl的方法和设备 | |
CN114866528A (zh) | 一种基于MQTT和Websocket的数据通讯方法 | |
CN114629866A (zh) | 一种多个***之间随机在线客服建立实时通讯的方法 | |
CN102255825A (zh) | 一种可扩展的交互式通讯方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |