OpenStack通用技术——消息总线

opestack遵循这样的设计原则:

  • 项目之间通过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中获取响应
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值