您的位置:首页 > 运维架构

openstack中的amqp

2014-03-19 20:23 225 查看
有任何疑问和错误,请轻拍,谢谢

最近学习openstack中的消息通信机制,它是使用的amqp,高级消息队列协议,看到一篇文章兔子和兔子窝介绍了amqp,受益匪浅,把自己的理解画了一个图表示出来,如下所示





其中队列(queue)即是存放消息的队列,队列中的新消息到达后,消费者可以执行预先设定的函数,然后把消息删除

交换机(exchange)是一个路由程序,当有消息发给交换机后,交换机根据它和队列之间的绑定判断应该发消息给谁,交换机有三种类型,分别能够按完全相同词汇匹配的direct型,按正则表达式匹配的topic型,和不匹配,把消息发给所有绑定到这个交换机上的fanout型

绑定(binding)是一个规则,它根据消息中的路由键规定这个消息是否应该传递给这个队列,我的理解是,这个路由键就是一个标记,用户发送的消息如果带的标记和这个标记匹配,就能从这个交换机传递给对应的队列

当生产者发送一个消息helloword,并且加上apple的标记发送给交换机direct后,direct进行匹配发现queue1和queue2都和direct有标记为apple的绑定,于是将消息发给queue1和queue2。

openstack默认使用kombu框架做amqp的客户端实现,博客openstack
nova基础知识——rpc模块中的kombu 有介绍额外补充一点,openstack对kombu的框架做封装之后,不仅仅封装出三种消费者和三种生产者,还封装出一个Connection类,这个类实现了很多消息传递的函数,不需要我们收动new消费者出来,kombu提供create_connection方法获得Connection的对象,除了kombu和qpid,zmp,fake也都封装出了自己的Connection类和create_connection方法,不同的是qpid和kombu的create_connection方法是调用rpc_amqp.create_connection将自己的Connection类传进去,通过类似连接池获得一个Connection对象,而zmp,fake的create_connection方法是直接创建一个对象返回,而且提供的函数也不如kombu和qpid丰富,不清楚是这两个框架的封装工作还没有写完,还是本身这么简单就足够。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: