CN105005469A - 一种基于Zookeeper和RabbitMQ的非阻塞调用方法 - Google Patents
一种基于Zookeeper和RabbitMQ的非阻塞调用方法 Download PDFInfo
- 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
Links
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本发明提供一种基于Zookeeper和RabbitMQ的非阻塞的远程过程调用方法,包括如下步骤:在Zookeeper文件***中为调用者编号;调用者创建消息并向RabbitMQ队列发送;调用者创建文件节点并监听;被调用者解析判断能否独立完成;向调用者写入结果,Zookeeper***通知结果。本发明的调用方法为一种非阻塞的调用方法,调用者或者被调用者都不需要阻塞等待调用时间或者等待反馈结果,极大提高了远程调用过程中的效率,减少了***资源的消耗。
Description
技术领域
本发明属于分布式服务领域,具体涉及到一种非阻塞的远程调用解决方案。
背景技术
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文件节点中。
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)
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)
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 | 飞狐信息技术(天津)有限公司 | 对远程方法调用的服务进行故障检查的方法和装置 |
-
2015
- 2015-06-03 CN CN201510299990.8A patent/CN105005469B/zh active Active
Patent Citations (4)
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)
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的非阻塞调用方法 | |
CN104363407B (zh) | 一种视频会议***通讯方法及相应装置 | |
CN106850788A (zh) | 面向多源异构地理信息资源的集成框架及集成方法 | |
RU2608469C2 (ru) | Способ и устройство высокоэффективной доставки уведомлений в реальном времени с малым временем задержки | |
CN112995234B (zh) | 一种媒体传输链路管理方法及装置 | |
CN101222483A (zh) | 业务触发方法、***及业务触发装置 | |
CN113747373B (zh) | 消息处理***、装置和方法 | |
CN109151056B (zh) | 基于Canal的消息推送方法和*** | |
CN112262613B (zh) | 用于在基于服务的电信***中操作网络网关服务的方法和设备 | |
CN101834730A (zh) | 一种多媒体会议控制方法和*** | |
EP2974159A1 (en) | Method, device and system for voice communication | |
CN106534118A (zh) | 一种高性能ip‑sm‑gw***的实现方法 | |
CN101405990A (zh) | 维护公有群组成员呈现信息的***、装置及方法 | |
CN108259605B (zh) | 一种基于多数据中心的数据调用***及方法 | |
WO2016123875A1 (zh) | 多***终端的通话管理方法及多***终端 | |
CN112733051A (zh) | 一种基于WebSocket的信息推送管理***及其方法 | |
US20160241607A1 (en) | Reverse signaling to establish network calls | |
CN104168176B (zh) | 一种即时通讯方法、客户端、服务器及*** | |
CN113424608A (zh) | 用于为网络提供外部服务的实体 | |
JP2012530304A (ja) | ユーザ端末のプレゼンス情報を制御するための方法およびデバイス | |
CN112637540B (zh) | 多客户端的音视频通话连接方法、装置、设备及存储介质 | |
CN114679433B (zh) | 视频访问会话管理***、方法、计算机设备及存储介质 | |
WO2019161721A1 (zh) | 一种基于互通rcs***的对应关系处理方法及装置 | |
CN104994116A (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 |