CN103503388A - 一种分布式队列消息读取方法及设备、系统 - Google Patents

一种分布式队列消息读取方法及设备、系统 Download PDF

Info

Publication number
CN103503388A
CN103503388A CN201180001873.9A CN201180001873A CN103503388A CN 103503388 A CN103503388 A CN 103503388A CN 201180001873 A CN201180001873 A CN 201180001873A CN 103503388 A CN103503388 A CN 103503388A
Authority
CN
China
Prior art keywords
message
internal indicator
client
distributed
distributed queue
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
Application number
CN201180001873.9A
Other languages
English (en)
Other versions
CN103503388B (zh
Inventor
胡斐然
刘先宁
晏鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Huawei Cloud Computing Technology Co ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN103503388A publication Critical patent/CN103503388A/zh
Application granted granted Critical
Publication of CN103503388B publication Critical patent/CN103503388B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9063Intermediate storage in different physical parts of a node or terminal

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)

Abstract

一种分布式队列消息读取方法及设备、系统,该方法包括:接收客户端发送的获取消息请求;从分布式队列中获取与所述获取消息请求对应的消息,所述消息中携带有内部标识ID;提取所述消息携带的内部标识ID,并且判断分布式数据库中是否存储有所述内部标识ID;若是,则删除所述分布式数据库中存储的所述消息携带的内部标识ID,以及从获取的所述消息中删除所述内部标识ID,并将删除了所述内部标识ID的消息发送给所述客户端。本发明实施例可以避免客户端从分布式队列中读取到相同的消息,降低消息重复处理的风险。

Description

一种分布式队列消息读取方法及设备、 系统 技术领域
本发明涉及数据处理领域, 尤其涉及一种分布式队列消息读取方法及设 备、 系统。
背景技术
随着云计算兴起, 分布式也成为软件设计开发的趋势, 而分布式软件开发 的核心之一就是分布式队列。在分布式队列中,为了提高分布式队列的可靠性, 分布式队列在存储一条消息时往往存储该消息的多个副本;而当分布式队列的 某一条消息被客户端读取时, 分布式队列需要删除该消息的所有副本,从而避 免相同的消息被客户端读取后进行重复处理, 影响业务流程。
实际应用中, 分布式队列可能存在大量并发访问, 分布式队列某一条消息 被读取后, 需要一段时间来删除该消息的所有副本, 当该消息的副本数量较多 时,删除该消息的所有副本所需要的一段时间也较长,在这段时间内客户端可 能读取到相同的消息, 加剧了消息重复处理的风险。
发明内容
针对上述缺陷, 本发明实施例提供的一种分布式队列消息读取方法及设 备、 系统, 能够避免客户端从分布式队列中读取到相同的消息, 降低消息重复 处理的风险。
一种分布式队列消息读取方法, 包括:
接收客户端发送的获取消息请求;
从分布式队列中获取与所述获取消息请求对应的消息,所述消息中携带有 内部标识 ID;
提取所述消息携带的内部标识 ID, 并且判断分布式数据库中是否存储有 所述内部标识 ID; 若是, 则删除所述分布式数据库中存储的所述消息携带的 内部标识 ID, 以及从获取的所述消息中删除所述内部标识 ID, 并将删除了所 述内部标识 ID的消息发送给所述客户端。
另一种分布式队列消息读取方法, 包括:
接收客户端发送的获取消息请求; 从分布式队列中获取与所述获取消息请求对应的消息,所述消息中携带有 内部标识 ID;
提取所述消息的内部标识 ID,并 ^据所述内部标识 ID确定出对应的分布 式行级锁, 若所述分布式行级锁中存储的 Value值表示可读, 则将所述 Value 值置为表示不可读, 以及从获取的所述消息中删除所述内部标识 ID, 并将删 除了所述内部标识 ID的消息发送给所述客户端。
一种分布式队列消息读取设备, 包括:
接收单元, 用于接收客户端发送的获取消息请求;
获取单元, 用于从分布式队列中获取与所述获取消息请求对应的消息, 所 述消息中携带有内部标识 ID;
判断单元, 用于提取所述消息的内部标识 ID, 并且判断分布式数据库中 是否存储有所述内部标识 ID;
控制单元, 用于在所述判断单元的判断结果为是时,删除所述分布式数据 库中存储的所述消息携带的内部标识 ID, 以及从获取的所述消息中删除所述 内部标识 ID, 并将删除了所述内部标识 ID的消息发送给所述客户端;
所述分布式数据库, 用于存储所述消息的内部标识 ID。
另一种分布式队列消息读取设备, 包括:
第二接收单元, 用于接收客户端发送的获取消息请求;
第二获取单元, 用于从分布式队列中获取与所述获取消息请求对应的消 息, 所述消息中携带有内部标识 ID;
提取单元, 用于提取所述消息的内部标识 ID, 并根据所述内部标识 ID确 定出对应的分布式行级锁;
识别单元, 用于识别所述分布式行级锁中存储的 Value值是否表示可读; 第二控制单元, 用于在所述分布式行级锁中存储的 Value值表示可读时, 将所述 Value值置为表示不可读, 以及从获取的所述消息中删除所述内部标识 ID, 并将删除了所述内部标识 ID的消息发送给所述客户端。
一种分布式队列消息读取系统,包括客户端以及上述任意一种分布式队列 消息读取设备;
所述客户端, 用于发送获取消息请求给所述分布式队列消息读取设备, 以 及接收所述分布式队列消息读取设备发送的与所述获取消息请求对应的消息 进行业务处理。
本发明实施例中, 当接收到客户端发送的获取消息请求后, 可以从分布式 队列中获取与该获取消息请求对应的消息并提取该消息携带的内部标识 ID, 若分布式数据库中存储有该内部标识 ID, 则删除分布式数据库中存储的该消 息携带的内部标识 ID , 以及从该消息中删除该内部标识 ID , 并将删除了该内 部标识 ID的消息发送给客户端。 基于该技术方案, 当任意客户端对已经读取 过的消息进行重复读取时, 即使分布式队列中存在相同的消息 (即消息的副 本), 也会因为分布式数据库中已删除了该消息携带的内部标识 ID, 而不会发 送给客户端进行处理, 从而可以避免客户端从分布式队列中读取到相同的消 息, 降低消息重复处理的风险。
本发明实施例中, 当接收到客户端发送的获取消息请求后, 可以从分布式 队列中获取与该获取消息请求对应的消息并提取该消息携带的内部标识 ID, 以及根据该消息携带的内部标识 ID确定出分布式行级锁后, 识别分布式行级 锁中存储的 Value值是否表示可读, 若表示可读, 则将该 Value值置为表示不 可读, 以及从该消息中删除该内部标识 ID , 并将删除了该内部标识 ID的消息 发送给客户端。基于该技术方案, 当任意客户端对已经读取过的消息进行重复 读取时, 即使分布式队列中存在相同的消息 (即消息的副本), 也会因为分布 式行级锁中的 Value值表示不可读, 而不会发送给客户端进行处理, 从而可以 防止客户端从分布式队列中读取到相同的消息, 降低消息重复处理的风险。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要 使用的附图作筒单地介绍,显而易见地, 下面描述中的附图仅仅是本发明的一 些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动的前提下, 还 可以根据这些附图获得其他的附图。
图 1为本发明实施例提供的一种分布式队列消息读取方法的流程示意图; 图 2为图 1所示方法包含的分布式队列消息存储方法的流程示意图; 图 3为图 2所示的分布式队列消息存储方法的模块化示意图;
图 4 为本发明实施例提供的另一种分布式队列消息读取方法的流程示意 图;
图 5 为本发明实施例提供的又一种分布式队列消息读取方法的流程示意 图;
图 6 为本发明实施例提供的另一种分布式队列消息读取方法的模块化示 意图;
图 7、图 8为本发明实施例提供的分布式队列消息读取设备的结构示意图; 图 9为本发明实施例提供的分布式队列消息读取系统的结构示意图; 图 10为本发明实施例提供的又一种分布式队列消息读取方法的流程示意 图;
图 11为图 10所示方法包含的分布式队列消息存储方法的流程示意图; 图 12为图 11所示的分布式队列消息存储方法的模块化示意图;
图 13为本发明实施例提供的另一种分布式队列消息读取方法的流程示意 图;
图 14为本发明实施例提供的又一种分布式队列消息读取方法的流程示意 图;
图 15为本发明实施例提供的一种 DHT的原理图;
图 16、 图 17为本发明实施例提供的分布式队列消息读取设备的结构示意 图;
图 18为本发明实施例提供的另一种分布式队列消息读取系统的结构示意 图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、 完整地描述, 显然, 所描述的实施例仅仅是本发明一部分实施例, 而不是 全部的实施例。基于本发明中的实施例, 本领域普通技术人员在没有作出创造 性劳动前提下所获得的所有其他实施例, 都属于本发明保护的范围。
本发明实施例提供的一种分布式队列消息读取方法及设备、 系统, 能够避 免客户端从分布式队列中读取到相同的消息, 降低消息重复处理的风险。 以下 分别进行详细说明。
请参阅图 1 , 图 1为本发明实施例提供的一种分布式队列消息读取方法的 流程示意图。 如图 1所示, 该方法可以包括以下步骤:
101、 接收客户端发送的获取消息请求。
一个实施例中,可以由去重复代理服务器来接收客户端发送的获取消息请 求。 一般地, 客户端发送的获取消息请求中都会携带有指示信息(例如消息自 身标识), 该指示信息用于指示客户端希望获取到的消息, 这是本领域技术人 员公知的常识, 本发明实施例不作详细介绍。
102、 从分布式队列中获取与上述获取消息请求对应的消息, 其中, 该消 息中携带有内部标识 ID;
一个实施例中,从分布式队列中获取与上述获取消息请求对应的消息具体 可以为:
去重复代理服务器将客户端发送的获取消息请求转发至分布式队列,并且 接收分布式队列发送的与上述获取消息请求对应的消息。
其中,分布式队列可以根据客户端发送的获取消息请求中携带的指示信息 (例如消息自身标识 ), 将与上述获取消息请求对应的消息发送给去重复代理 服务器。
103、 提取上述消息的内部标识 ID, 并且判断分布式数据库中是否存储有 该内部标识 ID; 若是, 则执行步骤 104; 若否, 则执行步骤 105。
一个实施例中, 去重复代理服务器提取上述消息的内部标识 ID之后, 可 以将提取的内部标识 ID和分布式数据库中存储的内部标识 ID进行比对,如果 发现分布式数据库中存储有上述消息携带的内部标识 ID (即所提取的内部标 识 ID与分布式数据库中存储的某一个内部标识 ID相同), 则说明当前从分布 式队列中获取的与上述获取消息请求对应的消息还没有被客户端读取过,进而 可以执行步骤 104; 反之, 如果发现分布式数据库中没有存储上述消息携带的 内部标识 ID (即提取的内部标识 ID与分布式数据库中存储的内部标识 ID均 不相同), 则说明当前从分布式队列中获取的与上述获取消息请求对应的消息 已经被客户端读取过, 进而可以执行步骤 105。
104、 删除分布式数据库中存储的上述消息携带的内部标识 ID, 以及从获 取的上述消息中删除上述内部标识 ID,并将删除了上述内部标识 ID的消息发 送给客户端。 一个实施例中, 如果发现从上述消息中提取的内部标识 ID与分布式数据 库中存储的某一个内部标识 ID相同, 则说明当前从分布式队列中获取的与上 述获取消息请求对应的消息还没有被客户端读取过,此时去重复代理服务器可 以删除分布式数据库中存储的上述消息携带的内部标识 ID。 这样即使分布式 队列中还存在相同的消息 (即消息的副本), 也会因为分布式数据库中已删除 了该消息中携带的内部标识 ID, 而不会发送给客户端进行处理, 从而可以防 止客户端从分布式队列中读取到相同的消息, 降低消息重复处理的风险。
另夕卜,去重复代理服务器删除分布式数据库中存储的上述消息携带的内部 标识 ID之后,可以将上述消息携带的内部标识 ID删除,并将已删除内部标识 ID的消息发送给客户端, 使客户端可以对该消息进行业务处理。
105、 发送错误响应给客户端。
一个实施例中, 如果发现从上述消息中提取的内部标识 ID与分布式数据 库中存储的内部标识 ID均不相同, 则说明当前从分布式队列中获取的与上述 获取消息请求对应的消息已经被客户端读取过,去重复代理服务器可以发送错 误响应 null给客户端,防止客户端从分布式队列中读取到相同的消息进行重复 处理。 分布式队列发送与上述获取消息请求对应的消息给去重复代理服务器之 后, 分布式队列可以删除上述获取消息请求对应的消息的所有副本,从而可以 尽量地避免客户端从分布式队列中读取到相同的消息进行重复处理,也使得分 布式队列保持尽可能多的空闲空间, 用于存储其他的消息及其副本。
一个实施例中,对应于上述读取过程, 本发明实施例提供的上述方法在上 述步骤 101之前还可以包括消息的存储过程, 该存储过程可以包括以下步骤:
A、 去重复代理服务器接收客户端的输入消息。
B、去重复代理服务器为客户端输入消息生成内部标识 ID, 并将所述内部 标识 ID加入客户端输入消息。
一个实施例中, 去重复代理服务器可以采用随机生成方式或哈希 HASH 算法为客户端输入消息生成内部标识 ID, 其中, 去重复代理服务器为每一个 客户端输入消息生成的内部标识 ID互不相同。 C、 去重复代理服务器将加入内部标识 ID后的消息存储到分布式队列; 其中, 分布式队列还存储至少一个加入内部标识 ID后的消息的副本。
D、 去重复代理服务器将为客户端输入消息生成的内部标识 ID存储到分 布式数据库。
其中, 通过上述步骤 A~B , 去重复代理服务器可以为客户端输入消息生 成内部标识 ID, 并加入客户端输入消息, 以及将加入内部标识 ID后的消息存 储到分布式队列, 以及将为客户端输入消息生成的内部标识 ID存储到分布式 数据库,使得去重复代理服务器可以根据图 1所示的方法进行分布式队列消息 读取,避免客户端从分布式队列中读取到相同的消息, 降低消息重复处理的风 险。
其中, 上述步骤( 、 步骤 D之间的顺序可以调换, 或者上述步骤 C、 步骤 D可以同时进行, 本发明实施例不作限定。
本发明实施例中, 分布式队列存储的消息中携带有内部标识 ID, 当接收 到客户端发送的获取消息请求后,可以从分布式队列中获取与该获取消息请求 对应的消息, 并判断分布式数据库中是否存储有该内部标识 ID, 如果有 (即 提取的内部标识 ID与分布式数据库中存储的某一个内部标识 ID相同), 则可 以删除分布式数据中存储的上述消息携带的内部标识 ID, 以及删除上述消息 携带的内部标识 ID, 以及将删除了内部标识 ID的消息发送给客户端。 基于上 述技术方案, 即使分布式队列中存在相同的消息 (即消息的副本), 也会因为 分布式数据库中已删除了该消息中携带的内部标识 ID, 而不会发送给客户端 进行处理,从而可以防止客户端从分布式队列中读取到相同的消息, 降低消息 重复处理的风险。
请参阅图 2, 图 2为图 1所示方法包含的分布式队列消息存储方法的流程 示意图。 如图 2所示, 该分布式队列消息存储方法包括以下步骤:
201、 去重复代理服务器接收客户端输入的消息 M。
202、 去重复代理服务器采用 HASH算法为消息 M生成内部标识 ID, 并 将生成的内部标识 ID加入消息 M。
203、 去重复代理服务器将为消息 M生成的内部标识 ID存储到分布式数 据库。 204、 去重复代理服务器接收分布式数据库返回的存储确认消息 OK。
205、 去重复代理服务器将加入内部标识 ID后的消息 M存储到分布式队 歹1 J; 其中, 分布式队列还存储至少一个加入内部标识 ID后的消息 M的副本。
在图 2所示方法中, 也可以先执行上述步骤 205 , 然后再执行步骤 203和 步骤 204, 本发明实施例不作限定。
在图 2所示方法的基础上,去重复代理服务器可以根据图 1所示的方法进 行分布式队列消息读取,避免客户端从分布式队列中读取到相同的消息, 降低 消息重复处理的风险。
请参阅图 3,图 3为图 2所示的分布式队列消息存储方法的模块化示意图。 如图 3所示, 该分布式队列消息存储方法的过程如下:
( 1 )、 客户端 A发送消息给去重复代理服务器;
( 2 )、 去重复代理服务器为客户端 A发送的消息生成一个内部标识 ID, 并将该内部标识 ID存入分布式数据库;
( 3 )、去重复代理服务器将加入内部标识 ID后的客户端 A发送的消息发 送到分布式队列存储; 其中, 分布式队列还存储至少一个加入内部标识 ID后 的客户端 A发送的消息的副本。
在图 3所示模块图的基础上,去重复代理服务器可以根据图 1所示的方法 进行分布式队列消息读取,避免客户端从分布式队列中读取到相同的消息, 降 低消息重复处理的风险。
请参阅图 4, 图 4为本发明实施例提供的另一种分布式队列消息读取方法 的流程示意图。 如图 4所示, 该分布式队列消息读取方法包括以下步骤:
401、 去重复代理服务器接收客户端发送的获取消息请求 Get。
402、 去重复代理服务器将客户端发送的获取消息请求 Get转发至分布式 队列。
403、 去重复代理服务器接收分布式队列发送的与上述获取消息请求 Get 对应的消息 M , 其中, 该消息 M中携带有内部标识 ID。
404、 去重复代理服务器提取上述消息 M的内部标识 ID。
405、 去重复代理服务器基于提取的内部标识 ID, 判断出分布式数据库中 没有存储有该内部标识 ID (即提取的内部标识 ID与分布式数据中存储的内部 标识 ID均不相同)。
406、 去重复代理服务器发送错误响应 null给客户端。
在图 4所示的方法中,去重复代理服务器判断出分布式数据库中没有存储 有该内部标识 ID (即提取的内部标识 ID与分布式数据中存储的内部标识 ID 均不相同 ), 说明当前分布式队列发送的与上述获取消息请求 Get对应的消息
M已经被客户端读取过, 去重复代理服务器可以发送错误响应 null给客户端, 避免客户端从分布式队列中读取到相同的消息进行重复处理。
请参阅图 5 , 图 5为本发明实施例提供的又一种分布式队列消息读取方法 的流程示意图。 如图 5所示, 该分布式队列消息读取方法包括以下步骤:
501、 去重复代理服务器接收客户端发送的获取消息请求 Get。
502、 去重复代理服务器将客户端发送的获取消息请求 Get转发至分布式 队列。
503、 去重复代理服务器接收分布式队列发送的与上述获取消息请求 Get 对应的消息 M , 其中, 该消息 M中携带有内部标识 ID。
其中, 分布式队列将与上述获取消息请求 Get对应的消息 M发送给去重 复代理服务器之后, 可以删除分布式队列中存储的消息 M的所有副本。
504、 去重复代理服务器提取上述消息 M的内部标识 ID。
505、 去重复代理服务器基于提取的内部标识 ID, 判断出分布式数据库中 存储有该内部标识 ID (即提取的内部标识 ID与分布式数据中存储的某一个内 部标识 ID相同)。
506、 去重复代理服务器删除分布式数据库中存储的上述消息携带的内部 标识 ID。
507、去重复代理服务器将上述消息携带的内部标识 ID删除, 并将删除了 内部标识 ID的消息发送给客户端。
在图 5 所示的方法中, 即使分布式队列中存在相同的消息 (即消息的副 本), 也会因为分布式数据库中已删除了该消息中携带的内部标识 ID, 而不会 发送给客户端进行处理,从而可以避免客户端从分布式队列中读取到相同的消 息, 降低消息重复处理的风险。
一个实施例中,分布式队列可能存在大量客户端并发访问,在这种情况下, 应用本发明实施例提供的上述方法,可以避免客户端从分布式队列中读取到相 同的消息, 降低消息重复处理的风险。 以下通过具体实施例进行详细说明。
请参阅图 6, 图 6为本发明实施例提供的另一种分布式队列消息读取方法 的模块化示意图。 如图 6所示, 客户端 A、 B、 C分别通过各自对应的去重复 代理服务器并发访问分布式队列, 即客户端 A通过其对应的去重复代理服务 器发送获取消息请求至分布式队列; 客户端 B 通过其对应的去重复代理服务 器发送获取消息请求至分布式队列; 客户端 C通过其对应的去重复代理服务 器发送获取消息请求至分布式队列, 从而构成对分布式队列的并发访问。
假设客户端 A、 B、 C均需要读取分布式队列存储的消息 M, 则分布式队 列在接收到客户端 A、 B、 C通过各自对应的去重复代理服务器发送的获取消 息请求之后, 会对客户端 A、 B、 C发送的获取消息请求逐一进行处理。 例如, 息请求进行处理, 即分布式队列可以根据客户端 A发送的获取消息请求中携 带的指示信息(例如消息自身标识), 将与客户端 A发送的获取消息请求对应 的消息 M发送给客户端 A对应的去重复代理服务器;客户端 A对应的去重复 代理服务器接收到分布式队列发送的与客户端 A发送的获取消息请求对应的 消息 M后,可以提取该消息 M的内部标识 ID,并且判断分布式数据库中是否 存储有该内部标识 ID, 如果有, 则删除分布式数据库中存储的该消息 M携带 的内部标识 ID, 以及将该消息 M携带的内部标识 ID删除, 以及将删除了内 部标识 ID的消息发送给客户端 A。
其中, 分布式队列将与客户端 A发送的获取消息请求对应的消息 M发送 给客户端 A对应的去重复代理服务器之后, 分布式队列可以启动删除消息 M 的所有副本操作。由于分布式队列删除消息 M的所有副本是需要一段时间的, 而在这段时间内分布式队列还会继续对客户端 B、 C的获取消息请求进行处理, 因此在分布式队列删除完毕消息 M的所有副本之前, 分布式队列仍有可能将 消息 M的副本发送给客户端 B或客户端 C对应的去重复代理服务器。 进一步 地, 假设分布式队列将消息 M的副本发送给客户端 B对应的去重复代理服务 器, 那么客户端 B对应的去重复代理服务器接收到分布式队列发送的与客户 端 B发送的获取消息请求对应的 M消息(即副本)后, 可以提取该消息 M的 内部标识 ID, 并且判断分布式数据库中没有存储有该内部标识 ID (已被客户 端 A对应的去重复代理服务器删除 ),则客户端 B对应的去重复代理服务器发 送错误响应 null给客户端 B, 从而可以避免客户端 B从分布式队列中读取到 相同的消息 M进行重复处理。 端并发访问的情况下, 也可以避免客户端从分布式队列中读取到相同的消息, 降^ 消息重复处理的风险。
本发明实施例中,在不损失分布式优势的情况下,去重复代理服务器对客 户端是透明的,客户端还是像现有技术一样使用分布式队列, 分布式队列不需 要处理客户端读取重复的情况, 降低了客户端使用分布式队列的难度, 而且筒 请参阅图 7, 图 7为本发明实施例提供的一种分布式队列消息读取设备的 结构示意图。 如图 7所示, 该设备可以包括:
接收单元 701 , 用于接收客户端发送的获取消息请求;
获取单元 702, 用于从分布式队列中获取与上述获取消息请求对应的消 息, 该消息中携带有内部标识 ID;
判断单元 703, 用于基于提取的内部标识 ID, 判断分布式行数据库 705 中是否存储有该内部标识 ID;
控制单元 704, 用于在判断单元 703的判断结果为是时, 删除分布式数据 库 705 中存储的上述消息携带的内部标识 ID, 以及从获取的上述消息中删除 上述内部标识 ID, 并将删除了上述内部标识 ID的消息发送给客户端; 或者用 于在判断单元 703的判断结果为否时, 发送错误响应给客户端;
分布式数据库 705, 用于存储上述消息的内部标识 ID;
请参阅图 8, 图 8为本发明实施例提供的另一种分布式队列消息读取设备 的结构示意图。 如图 8所示, 该设备在图 7所示设备的基础上, 进一步还包括 生成单元 706、 存储单元 707。 在图 8所示的设备中, 接收单元 701还用于接 收客户端输入消息,相应地, 生成单元 706用于为客户端输入消息生成内部标 识 ID , 并加入客户端输入消息; 存储单元 707用于将加入内部标识 ID后的客 户端输入消息存储到分布式队列; 其中, 该分布式队列还存储至少一个加入内 部标识 ID后的客户端输入消息的副本; 以及将为客户端输入消息生成的内部 标识 ID存储到分布式数据库 705。
作为一个可选的实施方式,图 8所示的设备中生成单元 706具体用于采用 随机生成方式或哈希 HASH算法为客户端输入消息生成内部标识 ID, 并加入 客户端输入消息; 其中, 为每一个客户端输入消息生成的内部标识 ID互不相 同。
作为一个可选的实施方式, 图 7、 图 8所示的设备中, 获取单元 702具体 用于将客户端发送的获取消息请求转发至分布式队列,以及接收分布式队列发 送的与上述获取消息请求对应的消息, 该消息中携带有内部标识 ID。
一个实施例中,分布式队列发送与上述获取消息请求对应的消息给获取单 元 702之后, 分布式队列还用于该消息的所有副本。
本发明实施例中, 分布式队列存储的消息中携带有内部标识 ID, 当接收 单元 701接收到客户端发送的获取消息请求后,获取单元 702可以从分布式队 列中获取与该获取消息请求对应的消息, 判断单元 703基于提取的内部标识 ID, 可以判断分布式数据库中是否存储有该内部标识 ID, 如果有, 则控制单 元 704删除分布式数据库 705中存储的上述消息携带的内部标识 ID, 以及将 上述消息携带的内部标识 ID删除,以及将删除了内部标识 ID的消息发送给客 户端。基于上述技术方案,即使分布式队列中存在相同的消息(即消息的副本), 也会因为分布式数据库中已删除了该消息携带的内部标识 ID, 而不会发送给 客户端进行处理,从而可以防止客户端从分布式队列中读取到相同的消息, 降 低消息重复处理的风险。
请参阅图 9, 图 9为本发明实施例提供的一种分布式队列消息读取系统的 结构示意图。如图 9所示, 该系统可以包括客户端 901以及分布式队列消息读 取设备 902; 其中, 分布式队列消息读取设备 902的结构、 功能均与图 7或图 8所示的分布式队列消息读取设备相同, 本发明实施例不作复述。
其中,客户端 901用于发送获取消息请求给分布式队列消息读取设备 902, 以及接收分布式队列消息读取设备 902发送的与获取消息请求对应的消息进 行业务处理。
本发明实施例提供的分布式队列消息读取系统可以避免客户端 901 从分 布式队列中读取到相同的消息, 降低消息重复处理的风险。
在上述实施例描述的方法、设备和系统中, 为客户端输入消息生成的内部 标识 ID是存储在分布式数据库中的, 进而可以避免客户端从分布式队列中读 取到相同的消息, 降低消息重复处理的风险。 作为另一种可选的实施方式, 为 客户端输入消息生成的内部标识 ID也可以存储在分布式行级锁中, 同样可以 避免客户端从分布式队列中读取到相同的消息, 降低消息重复处理的风险。 以 下分别进行详细说明。
请参阅图 10, 图 10为本发明实施例提供的另一种分布式队列消息读取方 法的流程示意图。 如图 10所示, 该方法可以包括以下步骤:
其中, 步骤 1001、 1002分别与上述实施例中的步骤 101、 102相同, 本发 明实施例此处不作复述。
1003、 提取上述消息的内部标识 ID , 并才 据该内部标识 ID确定出对应的 分布式行级锁。
本发明实施例中, 每一个分布式行级锁中均存储一个关键值 key-Value值 对, 如果某一个分布式行级锁中存储的关键值 key=上述内部标识 ID, 则可以 确定出对应的分布式行级锁。本发明实施例后续将对分布式行级锁进行详细介 绍。
1004、 判断确定出的分布式行级锁中存储的 Value值是否表示可读, 如果 是, 则执行步骤 1005; 如果否, 则执行步骤 1006。
一个实施例中, Value值=上述内部标识 ID时, 可以表示可读, 而 Value 值为其他数值时表示不可读; 或者, Value值为非零值时表示可读, 而 Value 值为零时表示不可读, 本发明实施例不作限定。
一个实施例中, 去重复代理服务器提取上述消息的内部标识 ID之后, 可 以根据该内部标识 ID确定出对应的分布式行级锁, 如果发现分布式行级锁中 存储的 Value值表示可读, 则说明当前从分布式队列中获取的与上述获取消息 请求对应的消息还没有被客户端读取过, 进而可以执行步骤 1005; 反之, 如 果发现分布式行级锁中存储的 Value值表示不可读, 则说明当前从分布式队列 中获取的与上述获取消息请求对应的消息已经被客户端读取过,进而可以执行 步骤 1006。 1005、 将 Value值置为表示不可读, 以及从获取的上述消息中删除上述内 部标识 ID, 并将删除了上述内部标识 ID的消息发送给客户端。
一个实施例中, 如果发现分布式行级锁中存储的 Value值表示可读, 则说 明当前从分布式队列中获取的与上述获取消息请求对应的消息还没有被客户 端读取过, 此时去重复代理服务器可以将分布式行级锁中存储的 Value值置为 表示不可读, 这样即使分布式队列中还存在相同的消息 (即消息的副本), 也 会因为分布式行级锁中存储的 Value值表示不可读, 而不会发送给客户端进行 处理,从而可以避免客户端从分布式队列中读取到相同的消息, 降低消息重复 处理的风险。
另外, 去重复代理服务器将分布式行级锁中存储的 Value值设为表示不可 读之后, 可以删除上述消息携带的内部标识 ID, 并将已删除内部标识 ID的消 息发送给客户端, 使得客户端可以对该消息进行业务处理。
1006、 发送错误响应给客户端。
一个实施例中, 如果发现分布式行级锁中存储的 Value值表示不可读, 则 说明当前从分布式队列中获取的与上述获取消息请求对应的消息已经被客户 端读取过,去重复代理服务器可以发送错误响应 null给客户端,避免客户端从 分布式队列中读取到相同的消息进行重复处理。
一个实施例中, 图 10所示的方法还可以包括以下步骤:
分布式队列发送与上述获取消息请求对应的消息给去重复代理服务器之 后, 分布式队列可以删除上述获取消息请求对应的消息的所有副本,从而可以 尽量地避免客户端从分布式队列中读取到相同的消息进行重复处理,也使得分 布式队列保持尽可能多的空闲空间, 用于存储其他的消息及其副本。
一个实施例中, 对应于上述读取过程, 图 10所示的方法在上述步骤 1001 之前还可以包括消息的存储过程, 该存储过程可以包括以下步骤:
A、 去重复代理服务器接收客户端的输入消息。
B、去重复代理服务器为客户端输入消息生成内部标识 ID, 并将该内部标 识 ID加入客户端输入消息。
一个实施例中, 去重复代理服务器可以采用随机生成方式或哈希 HASH 算法为客户端输入消息生成内部标识 ID, 其中, 去重复代理服务器为每一个 客户端输入消息生成的内部标识 ID互不相同。
C、 去重复代理服务器将加入内部标识 ID后的消息存储到分布式队列; 其中, 分布式队列还存储至少一个加入内部标识 ID后的消息的副本。
D、 将为客户端输入消息生成的内部标识 ID作为关键值 key存储到分布 式行级锁中, 该关键值 key与一个 Value值匹配(即分布式行级锁中存储一个 key- Value值对 ), Value值表示可读。
其中, 通过上述步骤 A~B , 去重复代理服务器可以为客户端输入消息生 成内部标识 ID, 并加入客户端输入消息, 以及将加入内部标识 ID后的消息存 储到分布式队列, 以及将为客户端输入消息生成的内部标识 ID存储到分布式 行级锁, 使得去重复代理服务器可以根据图 10所示的方法进行分布式队列消 息读取,避免客户端从分布式队列中读取到相同的消息, 降低消息重复处理的 风险。
其中, 上述步骤( 、 步骤 D之间的顺序可以调换, 或者上述步骤 C、 步骤 D可以同时进行, 本发明实施例不作限定。
图 10所示的方法中, 当接收到客户端发送的获取消息请求后, 去重复代 理服务器可以从分布式队列中获取与该获取消息请求对应的消息并提取该消 息携带的内部标识 ID , 以及根据该消息携带的内部标识 ID确定出分布式行级 锁后, 识别分布式行级锁中存储的 Value值是否表示可读, 若可读, 则将该 Value值置为表示不可读, 以及将该消息携带的内部标识 ID删除, 以及将删除 内部标识 ID的消息发送给客户端。 基于该技术方案, 即使分布式队列中存在 相同的消息 (即消息的副本), 也会因为分布式行级锁中的 Value值表示不可 读, 而不会发送给客户端进行处理,从而可以避免客户端从分布式队列中读取 到相同的消息, 降^ 消息重复处理的风险。
请参阅图 11 , 图 11为图 10所示方法包含的分布式队列消息存储方法的 流程示意图。 如图 11所示, 该分布式队列消息存储方法包括以下步骤:
1101、 去重复代理服务器接收客户端输入的消息 M。
1102、 去重复代理服务器采用 HASH算法为消息 M生成内部标识 ID, 并 将生成的内部标识 ID加入消息 M。
1103、 去重复代理服务器将为消息 M生成的内部标识 ID, 将该内部标识 ID作为关键值 key存储到分布式行级锁中,该关键值 key与一个 Value值匹配 (即分布式行级锁中存储一个 key- Value值对), 该 Value值表示可读。
1104、 去重复代理服务器接收分布式行级锁返回的存储确认消息 OK。
1105、去重复代理服务器将加入内部标识 ID后的消息 M存储到分布式队 歹l ; 其中, 分布式队列还存储至少一个加入内部标识 ID后的消息 M的副本。
在图 11所示方法中, 也可以先执行上述步骤 1105, 然后再执行步骤 1103 和步骤 1104, 本发明实施例不作限定。
在图 11所示方法的基础上,去重复代理服务器可以根据图 10所示的方法 进行分布式队列消息读取,避免客户端从分布式队列中读取到相同的消息, 降 低消息重复处理的风险。
请参阅图 12, 图 12为图 11所示的分布式队列消息存储方法的模块化示 意图。 如图 12所示, 该分布式队列消息存储方法的过程如下:
( 1 )、 客户端 A发送消息给去重复代理服务器;
( 2 )、 去重复代理服务器为客户端 A发送的消息生成一个内部标识 ID, 并将该内部标识 ID作为关键值 key存储到分布式行级锁中, 该关键值 key与 一个 Value值匹配(即分布式行级锁中存储一个 key- Value值对), Value值表 示可读;
( 3 )、去重复代理服务器将加入内部标识 ID后的客户端 A发送的消息发 送到分布式队列存储; 其中, 分布式队列还存储至少一个加入内部标识 ID后 的客户端 A发送的消息的副本。
在图 12所示模块图的基础上,去重复代理服务器可以根据图 10所示的方 法进行分布式队列消息读取, 避免客户端从分布式队列中读取到相同的消息, 降^ 消息重复处理的风险。
请参阅图 13, 图 13为本发明实施例提供的另一种分布式队列消息读取方 法的流程示意图。 如图 13所示, 该分布式队列消息读取方法包括以下步骤: 1301、 去重复代理服务器接收客户端发送的获取消息请求 Get。
1302、去重复代理服务器将客户端发送的获取消息请求 Get转发至分布式 队列。
1303、 去重复代理服务器接收从分布式队列中获取与上述获取消息请求 Get对应的消息 M , 其中, 该消息 Μ中携带有内部标识 ID。
1304、 去重复代理服务器提取上述消息 M的内部标识 ID。
1305、去重复代理服务器根据该内部标识 ID确定出对应的分布式行级锁, 以及判断出该分布式行级锁中存储的 Value值表示不可读;
1306、 去重复代理服务器发送错误响应 null给客户端。
在图 13所示的方法中, 去重复代理服务器判断出该分布式行级锁中存储 的 Value值表示不可读时, 说明当前从分布式队列中获取的与上述获取消息请 求 Get对应的消息 M已经被客户端读取过, 去重复代理服务器可以发送错误 响应 null给客户端,避免客户端从分布式队列中读取到相同的消息进行重复处 理。
请参阅图 14, 图 14为本发明实施例提供的又一种分布式队列消息读取方 法的流程示意图。 如图 14所示, 该分布式队列消息读取方法包括以下步骤: 1401、 去重复代理服务器接收客户端发送的获取消息请求 Get。
1402、去重复代理服务器将客户端发送的获取消息请求 Get转发至分布式 队列。
1403、 去重复代理服务器接收分布式队列发送的与上述获取消息请求 Get 对应的消息 M , 其中, 该消息 M中携带有内部标识 ID。
其中, 分布式队列将与上述获取消息请求 Get对应的消息 M发送给去重 复代理服务器之后, 可以删除分布式队列中存储的消息 M的所有副本。
1404、 去重复代理服务器提取上述消息 M的内部标识 ID。
1405、去重复代理服务器根据该内部标识 ID确定出对应的分布式行级锁, 以及判断出该分布式行级锁中存储的 Value值表示可读。
1406、去重复代理服务器将该分布式行级锁中存储的 Value值置为表示不 可读。
1407、 去重复代理服务器将上述消息携带的内部标识 ID删除, 以及将删 除内部标识 ID的消息发送给客户端。
在图 14所示的方法中, 即使分布式队列中存在相同的消息 (即消息的副 本), 也会因为分布式行级锁中存储的 Value值表示不可读, 而不会发送给客 户端进行处理,从而可以避免客户端从分布式队列中读取到相同的消息, 降低 消息重复处理的风险。 问的情况下,也可以防止客户端从分布式队列中读取到相同的消息, 降低消息 重复处理的风险。
本发明实施例中, 上述的分布式行级锁的设计思路可以如下:
1、 由于客户端发送的消息携带有自身标识(属于现有技术), 因此, 可以 以消息携带的自身标识为基础, 并通过 Hash算法生成一个内部标识 ID (因为 Hash算法的原理, 不同的消息就会对应到不同的内部标识 ID )。
2、 将生成的内部标识 ID作为 Key存储到分布式行级锁中, 构成一个 key-Value值对, Value值可以为任意非空的数值(例如 Key=内部标识 ID, value= 内部标识 ID ), 表示可读。
3、上述存储 key- Value值对的分布式行级锁可以看作是采用分布式哈希表 ( Distributed Hash Table, DHT )算法实现的一个 KV存储引擎。 其中, KV存 储引擎存放数据的原理是先把存放数据的空间固定并形成 0~2Λ32环形 (如图 15所示的 DHT原理图 ),然后将存放数据的主机标识通过 Hash算法生成一个 值, 这个值在数据空间上形成一个主机节点, 然后在存放 Key- Value值对时, KV存储引擎会将 Key通过 Hash算法得到一个 Hash值, 该 Hash值在存储空 间环上表示为一个值节点 ,如果该值节点没有落在一个主机节点上,那么 KV 存储引擎会沿着存储空间环顺时针找到第一个 (或者 N个,如果需要 N个备份) 主机节点即存储该键值对主机。
4、当去重复代理服务器根据提取的内部标识 ID确定出对应的分布式行级 锁 (即 KV存储引擎 ) , 并判断确定出的分布式行级锁 (即 KV存储引擎 ) 中 存储的内部标识 ID (即 Key )对应的 Value值是否表示可读时, 这一过程又被 称为获取锁过程; 若 Value值表示可读, 则说明当前从分布式队列中获取的与 上述获取消息请求对应的消息还没有被客户端读取过,客户端可以读取。其中, 客户端能够读到消息就表示获取了锁。
5、 当去代理服务器将上述消息携带的内部标识 ID删除并发送给客户端 后, 可以将分布式行级锁(即 KV存储引擎)存储的 Value值置为表示不可读
(例如 Value值置空, 或为零), 以使其他客户端无法再去读这个消息, 这一 过程又被称为加锁过程。
上述步骤 3描述了 KV存储引擎的 DHT实现原理,其中, Key- Value值对 会均勾的分布在某个主机(或某几个主机)上, 在整个分布式对外服务的过程 中,对分布式行级锁的访问也会均勾的分布到不同的主机上, 不会产生对一台 主机的海量访问, 避免分布式行级锁成为新的性能瓶颈。
请参阅图 16, 图 16为本发明实施例提供的另一种分布式队列消息读取设 备的结构示意图。 如图 16所示, 该设备可以包括:
第二接收单元 1601 , 用于接收客户端发送的获取消息请求;
第二获取单元 1602, 用于从分布式队列中获取与上述获取消息请求对应 的消息, 该消息中携带有内部标识 ID;
提取单元 1603, 用于提取上述消息的内部标识 ID, 并 居该内部标识 ID 确定出对应的分布式行级锁 1606;
识别单元 1604, 用于识别上述分布式行级锁 1606中存储的 Value值是否 表示可读;
第二控制单元 1605, 用于在上述分布式行级锁 1606中存储的 Value值表 示可读时, 将 Value值置为表示不可读, 以及从获取的上述消息中删除上述内 部标识 ID, 并将删除了上述内部标识 ID的消息发送给客户端。
请参阅图 17, 图 17为本发明实施例提供的另一种分布式队列消息读取设 备的结构示意图。 如图 17所示, 该设备在图 16所示设备的基础上, 还进一步 包括第二生成单元 1607、 第二存储单元 1608。 在图 17所示的设备中, 第二接 收单元 1601还用于接收客户端输入消息; 相应地, 第二生成单元 1607用于为 客户端输入消息生成内部标识 ID,并加入客户端输入消息;第二存储单元 1608 用于将加入内部标识 ID后的客户端输入消息存储到分布式队列; 其中, 该分 布式队列还存储至少一个加入内部标识 ID后的客户端输入消息的副本; 以及 第二存储单元 1608将为客户端输入消息生成的内部标识 ID作为关键值 key 存储到分布式行级锁 1606中, 该关键值 key与一个 Value值匹配, 该 Value 值表示可读。
一个实施例中, 当提取单元 1603提取的分布式行级锁存储的关键值 key= 上述内部标识 ID时, 就可以确定出对应的分布式行级锁 1606。 请参阅图 18, 图 18为本发明实施例提供的一种分布式队列消息读取系统 的结构示意图。如图 18所示, 该系统可以包括客户端 1801以及分布式队列消 息读取设备 1802; 其中, 分布式队列消息读取设备 1802的结构、 功能均与图 16或图 17所示的分布式队列消息读取设备相同, 本发明实施例不作复述。
其中, 客户端 1801 用于发送获取消息请求给分布式队列消息读取设备
1802, 以及接收分布式队列消息读取设备 1802发送的与获取消息请求对应的 消息进行业务处理。
基于上述技术方案, 即使分布式队列中存在相同的消息(即消息的副本), 也会因为分布式行级锁中的 Value值表示不可读, 而不会发送给客户端进行处 理,从而可以避免客户端从分布式队列中读取到相同的消息, 降低消息重复处 理的风险。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可 以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存 储介质中, 该程序在执行时, 执行包括上述方法实施例的步骤; 而前述的存储 介质包括:只读存储器( Read-Only Memory, ROM )、随机存取存储器 ( Random Access Memory, RAM ), 磁碟或者光盘等各种可以存储程序代码的介质。
以上对本发明实施例所提供的一种分布式队列消息读取方法及设备、系统 述, 以上实施例的说明只是用于帮助理解本发明的方法及其核心思想; 同时, 对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围 上均会有改变之处, 综上所述, 本说明书内容不应理解为对本发明的限制。

Claims (1)

  1. 权 利 要 求
    1、 一种分布式队列消息读取方法, 其特征在于, 包括:
    接收客户端发送的获取消息请求;
    从分布式队列中获取与所述获取消息请求对应的消息,所述消息中携带有 内部标识 ID;
    提取所述消息携带的内部标识 ID, 并且判断分布式数据库中是否存储有 所述内部标识 ID; 若是, 则删除所述分布式数据库中存储的所述消息携带的 内部标识 ID, 以及从获取的所述消息中删除所述内部标识 ID, 并将删除了所 述内部标识 ID的消息发送给所述客户端。
    2、 根据权利要求 1所述方法, 其特征在于, 所述方法还包括:
    从分布式队列中获取与所述获取消息请求对应的消息后,所述分布式队列 中删除与所述获取消息请求对应的消息的所有副本。
    3、 根据权利要求 1或 2所述方法, 其特征在于, 所述方法还包括: 接收客户端的输入消息;
    为所述客户端输入消息生成内部标识 ID,并将所述内部标识 ID加入到所 述客户端输入消息中;
    将加入内部标识 ID后的所述客户端输入消息存储到所述分布式队列; 所 述分布式队列还存储至少一个所述加入内部标识 ID后的所述客户端输入消息 的副本;
    将为所述客户端输入消息生成的内部标识 ID存储到所述分布式数据库。
    4、 根据权利要求 3所述方法, 其特征在于, 所述为所述客户端输入消息 生成内部标识 ID, 包括:
    采用随机生成方式或哈希 HASH算法为所述客户端输入消息生成内部标 识 ID, 其中, 为每一个客户端输入消息生成的内部标识 ID互不相同。
    5、 根据权利要求 1~4任意一项所述方法, 其特征在于, 所述从分布式队 列中获取与所述获取消息请求对应的消息, 包括:
    将所述客户端发送的获取消息请求转发至所述分布式队列;
    接收所述分布式队列发送的与所述获取消息请求对应的消息。
    6、 一种分布式队列消息读取方法, 其特征在于, 包括: 接收客户端发送的获取消息请求;
    从分布式队列中获取与所述获取消息请求对应的消息,所述消息中携带有 内部标识 ID;
    提取所述消息的内部标识 ID,并 ^据所述内部标识 ID确定出对应的分布 式行级锁, 若所述分布式行级锁中存储的 Value值表示可读, 则将所述 Value 值置为表示不可读, 以及从获取的所述消息中删除所述内部标识 ID, 并将删 除了所述内部标识 ID的消息发送给所述客户端。
    7、 根据权利要求 6所述方法, 其特征在于, 所述方法还包括:
    接收客户端的输入消息;
    为所述客户端输入消息生成内部标识 ID, 并加入所述客户端输入消息; 将加入内部标识 ID后的所述客户端输入消息存储到所述分布式队列; 所 述分布式队列还存储至少一个所述加入内部标识 ID后的所述客户端输入消息 的副本;
    将为所述客户端输入消息生成的内部标识 ID作为关键值 key存储到所述 分布式行级锁中, 所述关键值 key与一个 Value值匹配, 所述 Value值表示可 读。
    8、根据权利要求 7所述方法, 其特征在于, 所述根据所述内部标识 ID确 定出对应的分布式行级锁包括:
    根据所述内部标识 ID确定出对应的分布式行级锁, 所述对应的分布式行 级锁存储的关键值 key=所述内部标识 ID。
    9、 一种分布式队列消息读取设备, 其特征在于, 包括:
    接收单元, 用于接收客户端发送的获取消息请求;
    获取单元, 用于从分布式队列中获取与所述获取消息请求对应的消息, 所 述消息中携带有内部标识 ID;
    判断单元, 用于提取所述消息的内部标识 ID, 并且判断分布式数据库中 是否存储有所述内部标识 ID;
    控制单元, 用于在所述判断单元的判断结果为是时,删除所述分布式数据 库中存储的所述消息携带的内部标识 ID, 以及从获取的所述消息中删除所述 内部标识 ID, 并将删除了所述内部标识 ID的消息发送给所述客户端; 所述分布式数据库, 用于存储所述消息的内部标识 ID。
    10、 根据权利要求 9所述设备, 其特征在于, 所述获取单元从分布式队列 中获取与所述获取消息请求对应的消息后,所述分布式队列删除与所述获取消 息请求对应的消息的所有副本。
    11、 根据权利要求 9或 10所述的设备, 其特征在于,
    所述接收单元还用于接收客户端输入消息;
    所述设备还包括:
    生成单元, 用于为所述客户端输入消息生成内部标识 ID, 并加入所述客 户端输入消息;
    存储单元, 用于将加入内部标识 ID后的所述客户端输入消息存储到所述 分布式队列; 所述分布式队列还存储至少一个所述加入内部标识 ID后的所述 客户端输入消息的副本; 以及将为所述客户端输入消息生成的内部标识 ID存 储到所述分布式数据库。
    12、 根据权利要求 11所述的设备, 其特征在于, 所述生成单元具体用于 采用随机生成方式或哈希 HASH 算法为所述客户端输入消息生成内部标识
    ID, 并加入所述客户端输入消息; 为每一个客户端输入消息生成的内部标识 ID互不相同。
    13、根据权利要求 90~12任意一项所述的设备, 其特征在于, 所述获取单 元具体用于将所述客户端发送的获取消息请求转发至所述分布式队列,接收所 述分布式队列发送的与所述获取消息请求对应的消息,所述消息中携带有内部 标识 ID。
    14、 一种分布式队列消息读取设备, 其特征在于, 包括:
    第二接收单元, 用于接收客户端发送的获取消息请求;
    第二获取单元, 用于从分布式队列中获取与所述获取消息请求对应的消 息, 所述消息中携带有内部标识 ID;
    提取单元, 用于提取所述消息的内部标识 ID, 并根据所述内部标识 ID确 定出对应的分布式行级锁;
    识别单元, 用于识别所述分布式行级锁中存储的 Value值是否表示可读; 第二控制单元, 用于在所述分布式行级锁中存储的 Value值表示可读时, 将所述 Value值置为表示不可读, 以及从获取的所述消息中删除所述内部标识 ID, 并将删除了所述内部标识 ID的消息发送给所述客户端。
    15、 根据权利要求 14所述的设备, 其特征在于,
    所述第二接收单元还用于接收客户端输入消息;
    所述设备还包括:
    第二生成单元, 用于为所述客户端输入消息生成内部标识 ID, 并加入所 述客户端输入消息;
    第二存储单元, 用于将加入内部标识 ID后的所述客户端输入消息存储到 所述分布式队列; 所述分布式队列还存储至少一个所述加入内部标识 ID后的 所述客户端输入消息的副本; 以及将为所述客户端输入消息生成的内部标识 ID作为关键值 key存储到所述分布式行级锁中, 所述关键值 key与一个 Value 值匹配, 所述 Value值表示可读。
    16、 根据权利要求 15所述的设备, 其特征在于, 所述提取单元提取的分 布式行级锁存储的关键值 key=所述内部标识 ID。
    17、 一种分布式队列消息读取系统, 其特征在于, 包括客户端以及上述权 利要求 9~13任意一项所述的分布式队列消息读取设备,或上述权利要求 14~16 任意一项所述的分布式队列消息读取设备;
    所述客户端, 用于发送获取消息请求给所述分布式队列消息读取设备, 以 及接收所述分布式队列消息读取设备发送的与所述获取消息请求对应的消息 进行业务处理。
CN201180001873.9A 2011-09-01 2011-09-01 一种分布式队列消息读取方法及设备、系统 Active CN103503388B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2011/079241 WO2012162969A1 (zh) 2011-09-01 2011-09-01 一种分布式队列消息读取方法及设备、系统

Publications (2)

Publication Number Publication Date
CN103503388A true CN103503388A (zh) 2014-01-08
CN103503388B CN103503388B (zh) 2016-08-03

Family

ID=47258305

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180001873.9A Active CN103503388B (zh) 2011-09-01 2011-09-01 一种分布式队列消息读取方法及设备、系统

Country Status (2)

Country Link
CN (1) CN103503388B (zh)
WO (1) WO2012162969A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108197222A (zh) * 2017-12-28 2018-06-22 北京中关村科金技术有限公司 一种异常流数据的修复方法、系统及相关装置
CN110245028A (zh) * 2019-05-13 2019-09-17 平安科技(深圳)有限公司 IoT-MQ的消息存储方法、装置、计算机设备和存储介质
CN113127217A (zh) * 2019-12-30 2021-07-16 中移(成都)信息通信科技有限公司 数据发布方法、装置、设备及存储介质
CN113794998A (zh) * 2021-08-20 2021-12-14 上海德吾信息科技有限公司 一种基于分布式锁的信息发送方法、装置及存储介质
CN114253745A (zh) * 2021-12-16 2022-03-29 北京金堤科技有限公司 一种消息去重处理方法、装置、存储介质和电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050271049A1 (en) * 2004-06-03 2005-12-08 International Business Machines Corporation DHCP cache method and apparatus
CN101512527A (zh) * 2006-10-05 2009-08-19 国际商业机器公司 用于处理请求的数据处理系统和方法
CN101547212A (zh) * 2008-03-29 2009-09-30 华为技术有限公司 一种分布式对象的调度方法和系统
US20100325190A1 (en) * 2009-06-23 2010-12-23 Microsoft Corporation Using distributed queues in an overlay network
CN102023974A (zh) * 2009-09-14 2011-04-20 中国移动通信集团公司 一种通过消息队列处理消息的方法、装置和系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050271049A1 (en) * 2004-06-03 2005-12-08 International Business Machines Corporation DHCP cache method and apparatus
CN101512527A (zh) * 2006-10-05 2009-08-19 国际商业机器公司 用于处理请求的数据处理系统和方法
CN101547212A (zh) * 2008-03-29 2009-09-30 华为技术有限公司 一种分布式对象的调度方法和系统
US20100325190A1 (en) * 2009-06-23 2010-12-23 Microsoft Corporation Using distributed queues in an overlay network
CN102023974A (zh) * 2009-09-14 2011-04-20 中国移动通信集团公司 一种通过消息队列处理消息的方法、装置和系统

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
孔素然: "基于散列思想的网页去重系统", 《硅谷》 *
曹婧华,等: "分布式消息队列的设计与实现", 《河南科技大学学报:自然科学版》 *
王利军,等: "一种基于Paxos 算法的容错机制", 《计算机应用与软件》 *
王小华,等: "基于N-Gram的文本去重方法研究", 《杭州电子科技大学学报》 *
贾志凯,等: "一种并行层次化的重复数据删除技术", 《计算机研究与发展》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108197222A (zh) * 2017-12-28 2018-06-22 北京中关村科金技术有限公司 一种异常流数据的修复方法、系统及相关装置
CN108197222B (zh) * 2017-12-28 2020-03-24 北京中关村科金技术有限公司 一种异常流数据的修复方法、系统及相关装置
CN110245028A (zh) * 2019-05-13 2019-09-17 平安科技(深圳)有限公司 IoT-MQ的消息存储方法、装置、计算机设备和存储介质
CN110245028B (zh) * 2019-05-13 2023-08-25 平安科技(深圳)有限公司 IoT-MQ的消息存储方法、装置、计算机设备和存储介质
CN113127217A (zh) * 2019-12-30 2021-07-16 中移(成都)信息通信科技有限公司 数据发布方法、装置、设备及存储介质
CN113794998A (zh) * 2021-08-20 2021-12-14 上海德吾信息科技有限公司 一种基于分布式锁的信息发送方法、装置及存储介质
CN113794998B (zh) * 2021-08-20 2022-07-15 上海德吾信息科技有限公司 一种基于分布式锁的信息发送方法、装置及存储介质
CN114253745A (zh) * 2021-12-16 2022-03-29 北京金堤科技有限公司 一种消息去重处理方法、装置、存储介质和电子设备

Also Published As

Publication number Publication date
CN103503388B (zh) 2016-08-03
WO2012162969A1 (zh) 2012-12-06

Similar Documents

Publication Publication Date Title
CN110569305B (zh) 区块同步方法、装置、介质和计算设备
CN101009516B (zh) 一种进行数据同步的方法、系统及装置
CN108959244B (zh) 地址分词的方法和装置
CN105404679B (zh) 数据处理方法和装置
CN107665233A (zh) 数据库数据处理方法、装置、计算机设备和存储介质
CN103503388A (zh) 一种分布式队列消息读取方法及设备、系统
CN109634932A (zh) 一种智能合约存储方法及存储系统
CN103731489B (zh) 一种数据存储方法、系统和设备
CN111488115A (zh) 基于区块链的数据缓存方法、装置、电子设备以及介质
CN110188103A (zh) 数据对账方法、装置、设备和存储介质
CN115065561B (zh) 一种基于数据库数据存储的信息交互方法及系统
CN106155775A (zh) 消息处理方法、设备及系统
CN110036381B (zh) 存储器内数据搜索技术
CN102833273B (zh) 临时故障时的数据修复方法及分布式缓存系统
CN104965835B (zh) 一种分布式文件系统的文件读写方法及装置
CN108090186A (zh) 一种大数据平台上的电力数据去重方法
CN104123102B (zh) 一种ip硬盘及其数据处理方法
CN107992354A (zh) 用于降低内存负载的方法以及装置
US9684668B1 (en) Systems and methods for performing lookups on distributed deduplicated data systems
CN111708835B (zh) 区块链数据存储方法及装置
CN104125254B (zh) 获取平台用户资料的方法和系统
CN110334065A (zh) 一种文件处理方法和系统
CN115543918A (zh) 一种文件快照方法、系统、电子设备及存储介质
CN104715197B (zh) 一种文件快速扫描方法和系统
CN112001799B (zh) 在区块链中执行智能合约的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220214

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee after: Huawei Cloud Computing Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20221209

Address after: 518000 Huawei Headquarters Office Building 101, Wankecheng Community, Bantian Street, Longgang District, Shenzhen, Guangdong

Patentee after: Shenzhen Huawei Cloud Computing Technology Co.,Ltd.

Address before: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee before: Huawei Cloud Computing Technology Co.,Ltd.