AMQP的几种通信模式

基于AMQP的消息转发模型,有几种通信模式:
1 远程过程调用(RPC);
2 发布-订阅(Publish-Subscribe);
3 广播
后两种的实现比较简单,发布订阅只需采用Topic Exchange消息转发模型即可,广播只需采用Fanout Exchanges消息转发模型即可。稍微复杂一点的是RPC,下面就针对RPC做一个介绍。
RPC(Remote Procedure Call Protocol,远程过程调用协议),一般都称为“远程过程调用”。关于RPC协议本身,不多介绍,这里只介绍Openstack如何利用AMQP来实现RPC。如下图所示。
AMQP的几种通信模式
RPC是一种Client/Server通信模型。图中上半部分是RPC的一种表现形式,表面上看起来好像是Client调用了Server的一个函数(f1),实际上,Client与Server之间是有一来(request)一往(response)两个消息(图中的下半部分)。
在request消息中,RPC Client担任Producer的角色,RPC Server担任Consumer的角色。当RPC Server接到RPC Client发送过来的request消息时,它会做相应的处理,然后,发送response消息给RPC Client,这个时候,RPC Server将担任Producer的角色,而RPC Client担任Consumer的角色。
因此,基于AMQP实现RPC的原理,如下图:
AMQP的几种通信模式
图中,request消息对应的是Topic Exchange,response消息对应的是Direct Exchange。这是因为一个RPC Server可以发布多个API,每一个API对应一个Message Queue和一个Consumer。而RPC Client则无须这么做,只需要一个Consumer即可。