OpenStack通用技术——消息总线
2016-05-22 10:13
281 查看
opestack遵循这样的设计原则:
项目之间通过RESTful进行通行
项目内部,不同服务进程之间的通信,则必须要通过消息总线
这样的设计保证了项目对外提供服务的接口可以被不同类型的客户端高效支持,同时也保证了内部通信接口的可扩展性和可靠性。openstack olso.messaging库实现了以下两种发方式来完成项目内部各服务进程之间的通信:
1. 远程调度RPC:
通过远程调度,一个服务进程可以调用其他远程服务进程的方法,两种调度方式:call和cast。其中call方法会被同步执行,调用者会被阻塞直到结果返回。cast方式,会被异步执行,并不会立刻返回,调用者也也不会被阻塞,调用者需要用其他方式查询这次远程调用的结果。
2. 事件通知:
服务进程将时间通知发送到消息总线上,总线上所有堆此类事件感兴趣的服务进程都可以对此进行进一步的处理,但是处理结果并不会直接回给事件的发送者。
Direct bindingkey与routingkey相匹配
Topic 可以通过通配符“*”来进行迷糊匹配
Fanout 将消息传递到所有绑定的队列上
## 基于AMQP实现RPC##
客户端发送一个请求消息个Exchange,指定routing key位”op_queue“,同时指明一个消息队列名来获取响应”res_queue“
Exchange将消息发送给 op_queue
op_queue把消息推送给服务端,服务端执行RPC调用相应的服务,结束后将结果发给消息队列,指明routing为”res_queue“
Exchange将消息转发给res_queue
客户端从消息队列res_queue中获取响应
项目之间通过RESTful进行通行
项目内部,不同服务进程之间的通信,则必须要通过消息总线
这样的设计保证了项目对外提供服务的接口可以被不同类型的客户端高效支持,同时也保证了内部通信接口的可扩展性和可靠性。openstack olso.messaging库实现了以下两种发方式来完成项目内部各服务进程之间的通信:
1. 远程调度RPC:
通过远程调度,一个服务进程可以调用其他远程服务进程的方法,两种调度方式:call和cast。其中call方法会被同步执行,调用者会被阻塞直到结果返回。cast方式,会被异步执行,并不会立刻返回,调用者也也不会被阻塞,调用者需要用其他方式查询这次远程调用的结果。
2. 事件通知:
服务进程将时间通知发送到消息总线上,总线上所有堆此类事件感兴趣的服务进程都可以对此进行进一步的处理,但是处理结果并不会直接回给事件的发送者。
## AMQP ## openstack所支持的高级消息队列中大多是基于AMQP。传递消息的中间件(server/broker),消息的生产者将消息发送server,他会根据不同的条件将消息传递个不同的消费者。 上述操作由Exchange和queue来实现。其中Exchange不会存储消息,会根据不同的条件将消息发送个不同的Queue。所谓的条件就是Binding,每一个发送的消息会有一个routingkey,同样每一个Queue也会有一个bindingkey,当两者相匹配就会发送到改消息队列(Queue)。
Direct bindingkey与routingkey相匹配
Topic 可以通过通配符“*”来进行迷糊匹配
Fanout 将消息传递到所有绑定的队列上
## 基于AMQP实现RPC##
客户端发送一个请求消息个Exchange,指定routing key位”op_queue“,同时指明一个消息队列名来获取响应”res_queue“
Exchange将消息发送给 op_queue
op_queue把消息推送给服务端,服务端执行RPC调用相应的服务,结束后将结果发给消息队列,指明routing为”res_queue“
Exchange将消息转发给res_queue
客户端从消息队列res_queue中获取响应
相关文章推荐
- openstack kilo-with-dokcer
- 什么是OpenStack 开源的云计算管理平台项目
- openstack(juno版)使用rsyslog转发日志
- OpenStack Murano Dashboard(Kilo)安装
- Openstack Murano(Kilo) 网络排错
- Openstack Murano(kilo)二次开发之添加Volume
- Openstack Horizon(kilo)二次开发之匿名访问View
- Ubuntu源码安装Openstack(一)
- Ubuntu源码安装Openstack(二)
- openstack开发之--zabbix被坑的地方
- 仿OpenStack开发云计算管理软件”--第1周:熟悉开发环境
- 【原创】OpenStack Swift源码分析(二)ring文件的生成
- 【原创】Swift服务启动架构分析
- 【原创】OpenStack Swift源码分析(三)proxy服务启动
- 【原创】OpenStack Swift源码分析(四)proxy服务响应
- 【原创】OpenStack Swift源码分析(五)keystone鉴权
- Swift中的一致性哈希算法分析
- 【原创】OpenStack Swift源码分析(六)object服务
- 【原创】OpenStack Swift源码分析(七)Replication服务
- 【原创】OpenStack Swift源码分析(八)Updater && Auditor服务