基于消息队列的并发远程调用系统及方法与流程

文档序号:32489335发布日期:2022-12-10 02:11阅读:30来源:国知局
基于消息队列的并发远程调用系统及方法与流程

1.本发明涉及消息队列技术领域,具体地说是一种基于消息队列的并发远程调用系统及方法。


背景技术:

2.近年来,由于互联网的飞速发展,分布式系统有了越来越多的应用。由于整个系统由多个分布式模块组成,一个业务往往会贯穿系统中的多个模块,就需要模块之间有互相调用的能力。远程过程调用(remote procedure call,rpc)系统应运而生。
3.传统rpc系统有如下缺点:
4.①
业务无法串行化:被调用方需要针对每一个并发调用,启动独立的处理线程,在高并发的场景下,被调用方可能因为启动了过多线程而崩溃。
5.②
调用方和被调用方高度耦合:在进行rpc调用时,如果出现被调用方离线,或者网络中断的情况,rpc调用无法进行,业务整体失败。
6.故如何使得rpc系统既可以实现多线程并发处理,又可以实现调用双方解耦是目前亟待解决的技术问题。
7.专利号为cn112685190a的专利文献公开了基于消息队列的同步调用方法、系统、计算机设备及存储介质,包括将当前消息发送至服务器,并将当前线程根据消息id进行上锁;接收服务器发送的回包消息;将回包消息与当前消息进行合并,得到合并消息;获取所述回包消息对应的消息id及回包消息接收时间,根据回包消息接收时间与当前消息对应的发送时间之间的时间间隔进行对应的目标操作。该技术方案虽然使用消息队列实现了rpc的串行化,使得被调用方使用单线程即可完成rpc调用;但是该技术方案限制了被调用方的并发性能,同时也存在双方耦合的问题。


技术实现要素:

8.本发明的技术任务是提供一种基于消息队列的并发远程调用系统及方法,来解如何使得rpc系统既可以实现多线程并发处理,又可以实现调用双方解耦的问题。
9.本发明的技术任务是按以下方式实现的,一种基于消息队列的并发远程调用系统,该系统包括在调用方和被调用方的rpc单元之间设置有消息中间件,消息中间件用于调用双方的通信渠道,对消息进行暂存和管理,并对收发消息的双方进行解耦;
10.rpc单元包括回调注册模块、调用转换模块、消息分发模块和消息接收模块;
11.回调注册模块用于记录调用方的回调信息;
12.调用转换模块用于将rpc单元调用信息转换为消息;
13.消息分发模块用于将收到的消息分发至目的线程;
14.消息接收模块用于监听消息中间件中的消息队列,接收消息。
15.作为优选,所述消息中间件接收到消息后,将消息暂存在计算机内存中,使得消息的接收方不需要立即处理消息。这个过程类似于手机的短信,用户可以在方便的时间处理
短信;消息中间件将消息按照发送的时间,组织成一个队列,接收方获取消息时,按照时间顺序获取消息,保证消息的正确顺序,通过以上手段,消息中间件做到了发送方和接收方的解耦,发送方发送消息时,不需要考虑接收方是否在线,只需要保证消息中间件在线即可,接收方接受消息时,不需要访问发送方,只需要访问消息中间件即可。
16.作为优选,所述回调注册模块采用hashmap数据结构记录调用方的回调信息;
17.其中,hashmap是一种由key和value组成的键值对型数据结构;在回调注册模块中,key表示调用id,value表示回调函数指针;具体如下:
18.当调用发送时,调用方会生成一个调用id,放入消息中;
19.当调用结果返回后,消息分发模块会解析消息中的调用id,并找到hashmap中相关的键值对,即可找到回调函数的指针;
20.通过回调函数指针,调用回调函数。
21.作为优选,所述调用转换模块使用json规范将prc单元调用信息转换为字符串,字符串作为消息体,同时将调用id作为消息头,使字符串和调用id组成一个完整的消息。
22.作为优选,所述消息分发模块收到消息后,访问回调注册模块中的hashmap,找到回调函数的指针,通过回调函数指针,调用回调函数。
23.更优地,所述消息接收模块是一个实现了amqp协议的消息客户端,使用pull模式定时访问消息中间件,将消息中间件暂存的消息拉取至本地。
24.更优地,该系统的工作过程具体如下:
25.(1)、调用方调用线程将自身信息注册在回调注册模块;
26.(2)、调用方的调用转换模块将调用信息转换为消息;
27.(3)、将消息发送至消息中间件;
28.(4)、被调用方的消息接收模块从消息中间件接收消息;
29.(5)、被调用方的消息分发模块确定被调用线程,执行调用;
30.(6)、被调用线程处理业务;
31.(7)、被调用线程处理完业务后,将调用结果回传至被调用方的调用转换模块;
32.(8)、被调用方的调用转换模块将调用结果转换为消息,发送至消息中间件;
33.(9)、调用方的消息接收模块收到消息;
34.(10)、调用方的消息分发模块根据之前注册的回调信息,找到初始的调用线程;
35.(11)、调用线程收到调用结果,调用完成。
36.一种的基于消息队列的并发远程调用方法,该方法是在调用方和被调用方之间引入消息中间件,作为调用双方的通信渠道,并将rpc单元调用转换为消息,通过消息的发送和回发发送调用信息和回发调用结果;具体如下:
37.消息中间件接收到消息后,将消息暂存在计算机内存中,使得消息的接收方不需要立即处理消息。这个过程类似于手机的短信,用户可以在方便的时间处理短信;
38.消息中间件将消息按照发送的时间,组织成一个队列,接收方获取消息时,按照时间顺序获取消息,保证消息的正确顺序,通过以上手段,消息中间件做到了发送方和接收方的解耦,发送方发送消息时,不需要考虑接收方是否在线,只需要保证消息中间件在线即可,接收方接受消息时,不需要访问发送方,只需要访问消息中间件即可。
39.作为优选,所述rpc单元包括回调注册模块、调用转换模块、消息分发模块和消息
接收模块;
40.回调注册模块用于记录调用方的回调信息;
41.调用转换模块用于将rpc单元调用信息转换为消息;
42.消息分发模块用于将收到的消息分发至目的线程;
43.消息接收模块用于监听消息中间件中的消息队列,接收消息。
44.更优地,所述回调注册模块采用hashmap数据结构记录调用方的回调信息;
45.其中,hashmap是一种由key和value组成的键值对型数据结构;在回调注册模块中,key表示调用id,value表示回调函数指针;具体如下:
46.当调用发送时,调用方会生成一个调用id,放入消息中;
47.当调用结果返回后,消息分发模块会解析消息中的调用id,并找到hashmap中相关的键值对,即可找到回调函数的指针;
48.通过回调函数指针,调用回调函数;
49.所述调用转换模块使用json规范将prc单元调用信息转换为字符串,字符串作为消息体,同时将调用id作为消息头,使字符串和调用id组成一个完整的消息;
50.所述消息分发模块收到消息后,访问回调注册模块中的hashmap,找到回调函数的指针,通过回调函数指针,调用回调函数;
51.所述消息接收模块是一个实现了amqp协议的消息客户端,使用pull模式定时访问消息中间件,将消息中间件暂存的消息拉取至本地。
52.本发明的基于消息队列的并发远程调用系统及方法具有以下优点:
53.(一)本发明使得rpc单元既可以实现多线程并发处理,又可以实现调用双方的解耦;
54.(二)本发明通过消息中间件,调用双方可以充分解耦,在被调用方离线,或者网络中断时,只要消息中间件在线,就可以发送调用;
55.(三)本发明的被调用方不需要即时响应调用,可以利用消息中间件的特性,使用单线程串行执行调用,或者使用线程池限制调用的并发量;
56.(四)本发明充分利用了消息队列系统的串行化和解耦特性,并利用消息分发机制,兼顾了调用的并发特性,使得远程过程调用可以兼顾解耦与并发特性。
附图说明
57.下面结合附图对本发明进一步说明。
58.附图1为基于消息队列的并发远程调用系统的示意图。
具体实施方式
59.参照说明书附图和具体实施例对本发明的基于消息队列的并发远程调用系统及方法作以下详细地说明。
60.实施例1:
61.如附图1所示,本实施例提供了一种基于消息队列的并发远程调用系统,该系统包括在调用方和被调用方的rpc单元之间设置有消息中间件,消息中间件用于调用双方的通信渠道,对消息进行暂存和管理,并对收发消息的双方进行解耦;
62.rpc单元包括回调注册模块、调用转换模块、消息分发模块和消息接收模块;
63.回调注册模块用于记录调用方的回调信息;
64.调用转换模块用于将rpc单元调用信息转换为消息;
65.消息分发模块用于将收到的消息分发至目的线程;
66.消息接收模块用于监听消息中间件中的消息队列,接收消息。
67.本实施例中的消息中间件接收到消息后,将消息暂存在计算机内存中,使得消息的接收方不需要立即处理消息。这个过程类似于手机的短信,用户可以在方便的时间处理短信;消息中间件将消息按照发送的时间,组织成一个队列,接收方获取消息时,按照时间顺序获取消息,保证消息的正确顺序,通过以上手段,消息中间件做到了发送方和接收方的解耦,发送方发送消息时,不需要考虑接收方是否在线,只需要保证消息中间件在线即可,接收方接受消息时,不需要访问发送方,只需要访问消息中间件即可。
68.本实施例中的回调注册模块采用hashmap数据结构记录调用方的回调信息;
69.其中,hashmap是一种由key和value组成的键值对型数据结构;在回调注册模块中,key表示调用id,value表示回调函数指针;具体如下:
70.当调用发送时,调用方会生成一个调用id,放入消息中;
71.当调用结果返回后,消息分发模块会解析消息中的调用id,并找到hashmap中相关的键值对,即可找到回调函数的指针;
72.通过回调函数指针,调用回调函数。
73.本实施例中的调用转换模块使用json规范将prc单元调用信息转换为字符串,字符串作为消息体,同时将调用id作为消息头,使字符串和调用id组成一个完整的消息。
74.本实施例中的消息分发模块收到消息后,访问回调注册模块中的hashmap,找到回调函数的指针,通过回调函数指针,调用回调函数。
75.本实施例中的消息接收模块是一个实现了amqp协议的消息客户端,使用pull模式定时访问消息中间件,将消息中间件暂存的消息拉取至本地。
76.该系统的工作过程具体如下:
77.(1)、调用方调用线程将自身信息注册在回调注册模块;
78.(2)、调用方的调用转换模块将调用信息转换为消息;
79.(3)、将消息发送至消息中间件;
80.(4)、被调用方的消息接收模块从消息中间件接收消息;
81.(5)、被调用方的消息分发模块确定被调用线程,执行调用;
82.(6)、被调用线程处理业务;
83.(7)、被调用线程处理完业务后,将调用结果回传至被调用方的调用转换模块;
84.(8)、被调用方的调用转换模块将调用结果转换为消息,发送至消息中间件;
85.(9)、调用方的消息接收模块收到消息;
86.(10)、调用方的消息分发模块根据之前注册的回调信息,找到初始的调用线程;
87.(11)、调用线程收到调用结果,调用完成。
88.实施例2:
89.本实施例提供了一种的基于消息队列的并发远程调用方法,该方法是在调用方和被调用方之间引入消息中间件,作为调用双方的通信渠道,并将rpc单元调用转换为消息,
通过消息的发送和回发发送调用信息和回发调用结果;具体如下:
90.消息中间件接收到消息后,将消息暂存在计算机内存中,使得消息的接收方不需要立即处理消息。这个过程类似于手机的短信,用户可以在方便的时间处理短信;
91.消息中间件将消息按照发送的时间,组织成一个队列,接收方获取消息时,按照时间顺序获取消息,保证消息的正确顺序,通过以上手段,消息中间件做到了发送方和接收方的解耦,发送方发送消息时,不需要考虑接收方是否在线,只需要保证消息中间件在线即可,接收方接受消息时,不需要访问发送方,只需要访问消息中间件即可。
92.本实施例中的rpc单元包括回调注册模块、调用转换模块、消息分发模块和消息接收模块;
93.回调注册模块用于记录调用方的回调信息;
94.调用转换模块用于将rpc单元调用信息转换为消息;
95.消息分发模块用于将收到的消息分发至目的线程;
96.消息接收模块用于监听消息中间件中的消息队列,接收消息。
97.本实施例中的回调注册模块采用hashmap数据结构记录调用方的回调信息;
98.其中,hashmap是一种由key和value组成的键值对型数据结构;在回调注册模块中,key表示调用id,value表示回调函数指针;具体如下:
99.当调用发送时,调用方会生成一个调用id,放入消息中;
100.当调用结果返回后,消息分发模块会解析消息中的调用id,并找到hashmap中相关的键值对,即可找到回调函数的指针;
101.通过回调函数指针,调用回调函数;
102.本实施例中的调用转换模块使用json规范将prc单元调用信息转换为字符串,字符串作为消息体,同时将调用id作为消息头,使字符串和调用id组成一个完整的消息;
103.本实施例中的消息分发模块收到消息后,访问回调注册模块中的hashmap,找到回调函数的指针,通过回调函数指针,调用回调函数;
104.本实施例中的消息接收模块是一个实现了amqp协议的消息客户端,使用pull模式定时访问消息中间件,将消息中间件暂存的消息拉取至本地。
105.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1