opensatck基础知识----AMQP的基础概念

Kombu是一个为Python写的消息库,目标是为AMQ协议提供一个傻瓜式的高层接口,让Python中的消息传递变得尽可能简单,并且也提供一些常见消息传递问题的解决方案。

AMQP全称Advanced Message QueuingProtocol,是一个开放标准协议,定义一个异步消息传递所使用的应用层协议规范。知名的RabbitMQ服务器就是它的一个实现RabbitMQ实现了AMQP的消息中间件服务,它包括Server/Broker,支持多种协议网关和编程语言的客户端开发库。

 

OpenStack的设计原则:

1.   项目之间通过RESTful API进行通信;

2.   项目内部通过,不同服务进程之间通过消息总线进行通讯。

Openstack库(oslo.messaging库提供接口)实现了以下两种方式完成项目内部服务进程之间的通信。

(1)、远程过程调用(RPC)

一个服务进程可以调用其他远程服务进程的方法,调用方式:call和cast。

rpc.call:同步远程调用,远程方法被同步执行,调用者阻塞直到服务器响应结果返回。

rpc.cast:异步远程调用,调用者请求发送之后立即返回,远程方法会立即执行,但是调用者会利用其他方式查询远程调用的结果。

(2)、事件通知(Event Notification)

某个服务进程可以把事件通知发送到消息总线上,该消息总线上对此事件感兴趣的服务进程可以获得此事件通知并进行进一步处理,处理结果不会返回给事件发送者。

AMQP协议:

AMQP结构图:

       

AMQP高级消息队列协议,是一个异步消息传递所使用的开放的应用层协议规范,主要包括消息的导向、队列、路由、可靠性和安全性。实现AMQP的中间件服务(server/broker)来说,当不同的消息由生产者发送到server时,会根据不同的条件将消息传递给不同的消费者。

(1)、AMQP模型中,分别由Exchange(消息交换)和Queue(消息队列)来实现。生产者将消息发送到Exchange,由Exchange决定消息的路由,即决定将消息发送到哪个queue,然后消费者从Queue中取出消息进行处理。

(2)、Exchange本身不会保存消息,接收生产者发送来的消息,只是根据不同的条件把消息转发到不同的Queue。   条件称为绑定

接收到消息后,会查看消息属性、消息头和消息体,从中提取相关的信息,根据绑定表将消息转发给不同的Queue或者其他的Exchange。

(3)、每一个发送的消息都有一个routing key,同样每一个Queue有一个binding key。Exchange进行消息的路由时,会查询每一个       Queue是否匹配,匹配的话消息就会转发到那个Queue中。

(4)、Exchange类型,不同类型的Exchange会使用不同的匹配算法。

 

类  型

说   明

Direct

队列的binding key和消息的routing key必须完全一致,不支持通配符

Topic

通Direct类型,支持通配符。”*”匹配一个单字,”#”匹配0个或多个单字,单字之间通过”.”隔开。

注意:需要满足多个条件的路由,转发消息时需要依据多个条件。

Fanout

忽略绑定建和路由键,消息会被传递到所有绑定的队列上。

注意:广播式的路由,消息发送给所有的Queue。

(5)、作为消息的存储和分发实体,Queue会把消息缓存在内存或磁盘中,并按照顺序把消息分发给一个或多个消费者。

 

基于AMQP实现RPC

基于AMQP实现远程过程调用RPC的过程:

   

(1)、客户端发送请求消息给Exchange,消息中会指定routing key为”op_queue”和消息队列名”res_queue”获取响应

(2)、Exchange根据消息的路由键将消息进行转发到消息队列op_queue。

(3)、消息队列op_queue将消息推送给服务器端,服务端执行RPC调用的任务。 执行结束之后,服务器会把响应结果发送给Exchange并指明路由键为”res_queue”。

(4)、Exchange会将此消息转发到消息队列res_queue。

(5)、客户端从消息队列res_queue中获取响应结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值