openstack为什么使用rabbitmq作为rpc的底层协议
openstack rpc执行流程
https://www.rabbitmq.com/tutorials/tutorial-six-java.html
- 消费者发送mq消息到rabbitmq服务器,其中消息包括调用的方法、参数、reply_to topic。其中重点是reply_to topic,这个topic用于生产者存放结果,消费者消费结果。
多个生产者(分布式)消费消息,某个生产者消费消息后,其余生产者便不能再消费同一个消息。
生产者动态执行响应方法,取得结果,并将结果放到reply_to topic中,供消费者使用。此过程消费者一直在阻塞等待结果。
问题猜想
- 在整个过程中,消费者和生产者不需要感知到对方的存在
- 生产者只能消费一次rpc消息,因此可部署多个相同服务,用于做负载
- rabbitmq充当服务注册中心,网关,和负载均衡,简化了分布式系统的复杂度
- rabbitmq即为消息队列,那么消息队列的一些优点在这里也可以体现出来,如削峰,异步没有那么明显
rabbitmq的高可用特性,方便的横向扩展特性,以及其他的一些优点,共同促成了openstack分布式系统架构的简洁性。
总结后就是使用rabbitmq作为rpc底层信息传输协议,可以在一定程度上降低分布式系统的复杂度。