CN105005469A - 一种基于Zookeeper和RabbitMQ的非阻塞调用方法 - Google Patents

一种基于Zookeeper和RabbitMQ的非阻塞调用方法 Download PDF

Info

Publication number
CN105005469A
CN105005469A CN201510299990.8A CN201510299990A CN105005469A CN 105005469 A CN105005469 A CN 105005469A CN 201510299990 A CN201510299990 A CN 201510299990A CN 105005469 A CN105005469 A CN 105005469A
Authority
CN
China
Prior art keywords
caller
zookeeper
zxid
numbering
callid
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
CN201510299990.8A
Other languages
English (en)
Other versions
CN105005469B (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.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
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 Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN201510299990.8A priority Critical patent/CN105005469B/zh
Publication of CN105005469A publication Critical patent/CN105005469A/zh
Application granted granted Critical
Publication of CN105005469B publication Critical patent/CN105005469B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Telephonic Communication Services (AREA)

Abstract

本发明提供一种基于Zookeeper和RabbitMQ的非阻塞的远程过程调用方法,包括如下步骤:在Zookeeper文件系统中为调用者编号;调用者创建消息并向RabbitMQ队列发送;调用者创建文件节点并监听;被调用者解析判断能否独立完成;向调用者写入结果,Zookeeper系统通知结果。本发明的调用方法为一种非阻塞的调用方法,调用者或者被调用者都不需要阻塞等待调用时间或者等待反馈结果,极大提高了远程调用过程中的效率,减少了系统资源的消耗。

Description

一种基于Zookeeper和RabbitMQ的非阻塞调用方法
技术领域
本发明属于分布式服务领域,具体涉及到一种非阻塞的远程调用解决方案。
背景技术
Zookeeper是一种分布式树形文件系统,我们可以在Zookeeper文件系统中创建文件节点,并监听改改节点的内容变化。
RabbitMQ是一种分布式消息队列,通过一台RabbitMQ服务器,消息发送者不需要了解消息接受者的地址,而只需要知道RabbitMQ的服务器地址即可以发送消息,通过RabbitMQ的消息路由机制,消息接受者可以准确地接收到消息发送者的消息。
远程过程调用的本质是过程调用,过程调用只能实现同一个进程内部的调用,而远程过程调用利用网络,将调用者和被调用者之间分离,调用者甚至不知道被调用者是谁,通过Webservice或者是RPC的方式,透明地实现函数调用的过程,远程过程调用大部分是一种阻塞式的操作,即调用者在发送调用请求以后,会阻塞等待被调用者将结果返回。被调用者也会在被调用请求完成以后,立即将调用结果返回给被调用者。
传统远程过程调用方法中,调用者在发起调用请求,一般是通过WebService、RPC等方式,这种方法的缺点:
    1、在调用者在调用完成以后,调用者需要阻塞等待调用的结果。
    2、如果调用的方法涉及到分布式操作,那么被调用者也会被阻塞,直到得到分布式操作的结果然后才能返回结果。
3、调用者和被调用者在高频率的远程过程调用过程中效率不高,阻塞往往会消耗系统资源,被调用者如果也需要远程过程调用时,整个过程调用需要消耗的系统资源更多。
发明内容
本发明所要解决的技术问题是提供一种基于Zookeeper和RabbitMQ的非阻塞的远程过程调用方法,能解决背景技术中存在的问题。
本发明解决上述技术问题所采用的技术方案是:
一种基于Zookeeper和RabbitMQ的非阻塞调用方法,包括如下步骤:
(1)在Zookeeper文件系统中为每一个调用者编号callid并创建相应的目录节点;
(2)每次远程过程调用时,编号为callid的调用者创建一个包含消息内容和zxid编号的消息,向RabbitMQ队列发送这个消息;
(3)编号为callid的调用者在Zookeeper文件系统中相应的目录下创建一个以zxid编号命名的文件节点并监听这个文件节点的变化;
(4)被调用者在收到消息以后,解析得出消息内容、zxid编号和调用者编号callid,并判断该消息的处理能否独立完成,是进行步骤(5),否进行步骤(6);
(5)完成消息任务后,向Zookeeper文件系统中调用者callid目录下的zxid编号写入结果,Zookeeper系统通知调用者结果。
(6)被调用者生成一个新的包含该zxid编号和新的callid编号的分布式请求并发送,然后以类似步骤(3)的方式创建并监听Zookeeper文件系统中的zxid文件节点,等待结果;有了结果之后如步骤5中一样唤醒调用者。
(7)当调用者被Zookeeper唤醒,从Zookeeper文件系统中,得到结果以后,便将zxid编号的文件节点删除。
在采用上述技术方案的同时,本发明还可以采用或者组合采用以下进一步的技术方案:
步骤(2)中,每一个调用者都有一个独立自增的zxid编号和Zookeeper文件系统中该调用者的编号callid,用来区别不同调用者和调用次数。
步骤(7)中,如果调用者还需要将结果返回给上一个调用者,那么该调用者还需要将最终结果写入到上一个调用者目录下的zxid文件节点中。
本发明的有益效果是:本发明的调用方法为一种非阻塞的调用方法,调用者或者被调用者都不需要阻塞等待调用时间或者等待反馈结果,极大提高了远程调用过程中的效率,减少了系统资源的消耗。
附图说明
图1 本发明的流程图。
图2 本发明中Zookeeper文件系统的节点树形图。
具体实施方式
为了更为具体地描述本发明,下面结合具体实施例来对本发明方法及其系统进行详细说明。
基于Zookeeper和RabbitMQ的非阻塞调用方法,包括如下步骤:
步骤1、服务器A,B,C在Zookeeper服务器中注册。文件节点分别为/server/0,/server/1,/server/2。A,B,C服务器分别获取自己的服务器编号依次为0,1,2。然后进入步骤2。
步骤2、服务器A向服务器B发送远程调用请求requestA,首先将请求包装到一个Java对象Request:
class Request{
Unsigned intzxid,
Unsigned intcallid,
Unsigned intlastcallid,
Byte [] messages
}
这个对象中包含请求编号zxid,以及调用者编号callid和消息内容messages。然后调用RabbitMQ客户端的发送命令,将消息发送给RabbitMQ服务器,由RabbitMQ服务器将消息路由给服务器B。然后创建一个Zookeeper监听器监听Zookeeper文件系统中/server/0/1节点是否有变化。接着服务器A就可以去接受新的请求了,不用等待服务器B的响应消息,然后进入步骤3。
3、服务器B在接收到requestA时,解析这个请求得出zxid为1和callId为0。表示这是编号为0的服务器A发来的第一个请求。服务器B解析这个消息以后,首先需要获取服务器C上面的数据,然后根据本地数据计算出最终结果以返回给服务器A。服务器B则创建一个新的请求RequestB使用相同的zxid也就是1,callid设置为1(服务器B的编号),发送出去,然后监听Zookeeper文件系统中的/server/1/1节点。然后进入步骤4。
4、服务器C在接受到服务器B的消息后,将结果写入到/server/1/1节点。这一操作会唤醒服务器B,然后服务器B完成未完成的任务,将最终结果写入到/server/0/1中。然后进入步骤5。
5、服务器A被Zookeeper服务器唤醒,得到最终答案。

Claims (3)

1.一种基于Zookeeper和RabbitMQ的非阻塞调用方法,包括如下步骤:
(1)在Zookeeper文件系统中为每一个调用者编号callid并创建相应的目录节点;
(2)每次远程过程调用时,编号为callid的调用者创建一个包含消息内容和zxid编号的消息,向RabbitMQ队列发送这个消息;
(3)编号为callid的调用者在Zookeeper文件系统中相应的目录下创建一个以zxid编号命名的文件节点并监听这个文件节点的变化;
(4)被调用者在收到消息以后,解析得出消息内容、zxid编号和调用者编号callid,并判断该消息的处理能否独立完成,是进行步骤(5),否进行步骤(6);
(5)完成消息任务后,向Zookeeper文件系统中调用者callid目录下的zxid编号写入结果,Zookeeper系统通知调用者结果;
(6)被调用者生成一个包含该zxid编号和新的callid编号的分布式请求并发送,然后以类似步骤(3)的方式创建并监听Zookeeper文件系统中的zxid文件节点,等待结果;并根据结果确定是否唤醒调用者。
(7)当调用者被Zookeeper唤醒,从Zookeeper文件系统中,得到结果以后,便将zxid编号的文件节点删除。
2.根据权利要求书1所述的非阻塞调用方法,其特征在于:步骤(2)中,每一个调用者都有一个独立自增的zxid编号和Zookeeper文件系统中该调用者的编号callid,用来区别不同调用者和调用次数。
3.如权利要求1所述的非阻塞调用方法,其特征在于:步骤(7)中,如果调用者还需要将结果返回给上一个调用者,那么该调用者还需要将最终结果写入到上一个调用者目录下的zxid文件节点中。
CN201510299990.8A 2015-06-03 2015-06-03 一种基于Zookeeper和RabbitMQ的非阻塞调用方法 Active CN105005469B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510299990.8A CN105005469B (zh) 2015-06-03 2015-06-03 一种基于Zookeeper和RabbitMQ的非阻塞调用方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510299990.8A CN105005469B (zh) 2015-06-03 2015-06-03 一种基于Zookeeper和RabbitMQ的非阻塞调用方法

Publications (2)

Publication Number Publication Date
CN105005469A true CN105005469A (zh) 2015-10-28
CN105005469B CN105005469B (zh) 2018-04-13

Family

ID=54378150

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510299990.8A Active CN105005469B (zh) 2015-06-03 2015-06-03 一种基于Zookeeper和RabbitMQ的非阻塞调用方法

Country Status (1)

Country Link
CN (1) CN105005469B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107423122A (zh) * 2017-07-25 2017-12-01 苏州博纳讯动软件有限公司 一种复杂运维作业编排与调度系统及其方法
CN108347445A (zh) * 2018-03-19 2018-07-31 武汉斗鱼网络科技有限公司 实现远程调用的方法及装置
CN110489216A (zh) * 2019-07-05 2019-11-22 苏州浪潮智能科技有限公司 利用Windows API调用解除RabbitMQ-C库阻塞的方法和系统
CN111221662A (zh) * 2019-10-16 2020-06-02 贝壳技术有限公司 任务调度方法、系统及装置
CN112783672A (zh) * 2021-01-27 2021-05-11 传神语联网网络科技股份有限公司 一种远程过程调用处理方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080192626A1 (en) * 2006-01-10 2008-08-14 Huawei Technologies Co., Ltd. Service failure recovery method and system
CN102710554A (zh) * 2012-06-25 2012-10-03 深圳中兴网信科技有限公司 分布式消息系统和分布式消息系统的服务状态检测方法
CN103501237A (zh) * 2013-09-03 2014-01-08 小米科技有限责任公司 设备管理方法、管理平台、设备及系统
CN103731312A (zh) * 2014-01-26 2014-04-16 飞狐信息技术(天津)有限公司 对远程方法调用的服务进行故障检查的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080192626A1 (en) * 2006-01-10 2008-08-14 Huawei Technologies Co., Ltd. Service failure recovery method and system
CN102710554A (zh) * 2012-06-25 2012-10-03 深圳中兴网信科技有限公司 分布式消息系统和分布式消息系统的服务状态检测方法
CN103501237A (zh) * 2013-09-03 2014-01-08 小米科技有限责任公司 设备管理方法、管理平台、设备及系统
CN103731312A (zh) * 2014-01-26 2014-04-16 飞狐信息技术(天津)有限公司 对远程方法调用的服务进行故障检查的方法和装置

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107423122A (zh) * 2017-07-25 2017-12-01 苏州博纳讯动软件有限公司 一种复杂运维作业编排与调度系统及其方法
CN107423122B (zh) * 2017-07-25 2020-08-18 苏州博纳讯动软件有限公司 一种复杂运维作业编排与调度系统及其方法
CN108347445A (zh) * 2018-03-19 2018-07-31 武汉斗鱼网络科技有限公司 实现远程调用的方法及装置
CN110489216A (zh) * 2019-07-05 2019-11-22 苏州浪潮智能科技有限公司 利用Windows API调用解除RabbitMQ-C库阻塞的方法和系统
CN110489216B (zh) * 2019-07-05 2021-12-07 苏州浪潮智能科技有限公司 利用Windows API调用解除RabbitMQ-C库阻塞的方法和系统
CN111221662A (zh) * 2019-10-16 2020-06-02 贝壳技术有限公司 任务调度方法、系统及装置
CN112783672A (zh) * 2021-01-27 2021-05-11 传神语联网网络科技股份有限公司 一种远程过程调用处理方法及系统
CN112783672B (zh) * 2021-01-27 2024-04-05 传神语联网网络科技股份有限公司 一种远程过程调用处理方法及系统

Also Published As

Publication number Publication date
CN105005469B (zh) 2018-04-13

Similar Documents

Publication Publication Date Title
CN106713226B (zh) 一种用于分布式系统的远程过程调用处理方法和系统
CN105005469A (zh) 一种基于Zookeeper和RabbitMQ的非阻塞调用方法
CN106790676B (zh) 订阅通知的实现方法和装置
WO2019141111A1 (zh) 通信方法和通信装置
CN103312528B (zh) 一种心跳消息发送方法及用户终端
CN105357286B (zh) 一种基于Web的实时消息定向推送方法
CN104363407B (zh) 一种视频会议系统通讯方法及相应装置
RU2608469C2 (ru) Способ и устройство высокоэффективной доставки уведомлений в реальном времени с малым временем задержки
CN101222483A (zh) 业务触发方法、系统及业务触发装置
CN113747373B (zh) 消息处理系统、装置和方法
CN112995234B (zh) 一种媒体传输链路管理方法及装置
CN106970843B (zh) 远程调用方法和装置
CN109151056B (zh) 基于Canal的消息推送方法和系统
CN113826424A (zh) 用于向网络提供外部业务的实体
CN101834730A (zh) 一种多媒体会议控制方法和系统
CN106534118A (zh) 一种高性能ip‑sm‑gw系统的实现方法
CN101405990A (zh) 维护公有群组成员呈现信息的系统、装置及方法
WO2016123875A1 (zh) 多系统终端的通话管理方法及多系统终端
JP2024511907A (ja) ネットワーク機能登録方法、発見方法、装置、デバイス及び媒体
CN112733051A (zh) 一种基于WebSocket的信息推送管理系统及其方法
US20160241607A1 (en) Reverse signaling to establish network calls
CN109120578B (zh) 一种实现链路连接处理的方法及装置
CN113424608A (zh) 用于为网络提供外部服务的实体
CN104168176A (zh) 一种即时通讯方法、客户端、服务器及系统
CN114679433B (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
GR01 Patent grant
GR01 Patent grant