openstack各项目之间通过restful api进行通信,相同项目内不同组件进程组件之间通过消息总线进行通信。服务进程通过向消息总线上发送和获取消息,openstack是基于消息驱动的。
目前项目内部消息通信采用两种方式实现。RPC和事件通知。
1、RPC(remote procedure call)主要包含call和cast两种(call:同步调用;cast:异步接口)。
2、事件通知(event notification)
AMQP的架构如图所示
消息的处理分发主要有Exchange(消息交换)和Queue(消息队列)实现。
当producer将消息发送给消息服务器时,由Exchange和消息的routing key决定将消息发送给哪个queue队列,然后consumer在queue拿取自己感兴趣的消息进行处理。
Exchange并不会保存消息,只是对消息进行分发,负责指定消息发送到哪个队列上。
基于AMQP的RPC实现
- client发送消息request给exchange,routing key指明到op_queue消息队列,并从res_queue取返回。
- Exchange将消息推送到op_queue消息队列
- server端从op_queue取出自己需要处理的数据,执行对应的任务,并将执行的响应结果发送给exchange,指明到res_queue
- Exchange将返回的消息推送到res_queue
- client从res_queue获取响应。