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丰富,不清楚是这两个框架的封装工作还没有写完,还是本身这么简单就足够。
最近学习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丰富,不清楚是这两个框架的封装工作还没有写完,还是本身这么简单就足够。
相关文章推荐
- Linux /dev目录详解
- Xcode编译错误 Code Sign error: The identity 'iPhone Developer: Your Name' doesn't match any valid certif
- CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
- Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)
- ubuntu11.04无法安装软件的问题。
- document.documentElement.scrollTop || document.body.scrollTop;
- Eclipse EE 和 Tomcat 搭建便于调试 WEB项目
- Linux开机启动过程分析
- seo方法 seo优化技巧 教你如何提高网站排名
- openSUSE 13.1推荐输入法:fcitx
- tomcat内存溢出总结
- 将 linux mint 从 15 升级 到 16
- hadoop hdfs 断点续传--下载
- (干货)网站运营需要知道的数据
- Shell 参数置换
- linux设备驱动中常用函数 linux中断总结
- 一台机器安装多套hadoop环境 端口冲突的解决
- Linux 混杂设备、外部中断和输入子系统
- 在Linux下安装和使用MySQL
- 让你的apache+mod_python服务器支持自定义扩展名