最近纠结于一个问题,就是horizon 在处理前台数据的时候非得等到cinder client将数据全部获取后才开始执行horizon的下一行代码,这给大量数据显示造成了很大的时延,其实对于用户体验来说,完全可以仿照度妈或谷爷那样,先把少量数据尽快推送显示到用户浏览器,而同时建立消息队列继续将数据发送到浏览器,使用户在点击“下一页”的时候同时能体验到“秒打开”。综上所述,完全有必要在cinder client和horizon之间建立消息队列。

刚入捕蛇行列,一起从头开始学……

实验环境:centos 6.5 64bit

1、rabbbitMQ 服务安装

从官网下载rabbit-server安装包:rabbitmq-server-3.5.1-1.noarch.rpm

2、erlang安装

从rabbitMQ download页面下载:erlang-17.4-1.el6.x86_64.rpm

(当然,erlang安装也可以从源码安装,不过少不懂事的还是别折腾了)

3、安装

rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.5.-.noarch.rpm

4、启动rabbit-server: /etc/init.d/rabbitmq-server start

5、消息队列入门级介绍:[RabbitMQ+Python入门经典] 兔子和兔子窝

详细过程就不啰嗦了,大牛的博客写的很详细,贴上我稍加修改的代码:

# _*_ coding:utf-8 _*_
# file_name: amqp_consumer.py
from amqplib import client_0_8 as amqp conn = amqp.Connection(host="localhost:5672", userid="guest", password="guest", virtual_host="/", insist=False)
chan = conn.channel() chan.queue_declare(queue="po_box", durable=True, exclusive=False, auto_delete=False)
chan.exchange_declare(exchange="sorting_room", type="direct", durable=True, auto_delete=False,) chan.queue_bind(queue="po_box", exchange="sorting_room", routing_key="jason") def recv_callback(msg):
print 'Received: \"' + msg.body + '\" from channel #' + str(msg.channel.channel_id) chan.basic_consume(queue='po_box', no_ack=True, callback=recv_callback, consumer_tag="testtag")
while True:
chan.wait()
chan.basic_cancel("testtag") chan.close()
conn.close()
# file_name: amqp_publisher.py
from amqplib import client_0_8 as amqp
import sys conn = amqp.Connection(host="localhost:5672", userid="guest", password="guest", virtual_host="/", insist=False)
chan = conn.channel() # msg = amqp.Message(sys.argv[0])
msg = amqp.Message("hello world")
msg.properties["delivery_mode"] = 2
chan.basic_publish(msg,exchange="sorting_room",routing_key="jason") chan.close()
conn.close()

本文只是简单做了模仿工作,更深入的研究还待继续 ^_^

附:ZeroMQ,史上最快的消息队列 - ZMQ的学习和研究

最新文章

  1. 欲望 VS 抗拒
  2. go语言让windows发出声音,或者播放音乐
  3. 让你的Android程序更省电
  4. basePath = request.getScheme()+"://"+request.getServerName()+":"+r
  5. Android中的.9.png
  6. Kendo Web UI Grid数据绑定,删除,编辑,并把默认英文改成中文
  7. ** poj Y2K Accounting Bug 2586
  8. [CSS3备忘] transform animation 等
  9. eclipse工程名出现小红叉的解决办法
  10. JDK源码阅读(1)_简介+ java.io
  11. Gym 100952I&&2015 HIAST Collegiate Programming Contest I. Mancala【模拟】
  12. 使用git指令下载github仓库代码(笔记)
  13. TSVN客户端复制文件
  14. Java基础(面试题)
  15. idea Debug快捷键
  16. 洛谷P3870开关题解
  17. Fluent动网格【11】:弹簧光顺
  18. [Converge] Weight Initialiser
  19. Configure Virtual Serial Port Driver (vspd)注册表
  20. mysql python pymysql模块 增删改查 查询 字典游标显示

热门文章

  1. C/C++ Windows移植到Linux
  2. shell脚本编写注意事项
  3. Druid对比Vertica
  4. vim删除文本文件中末行^M
  5. shell报错:未预期的符号***附近有语法错误
  6. 转: Linux与JVM的内存关系分析
  7. Java实现算法之--选择排序
  8. spring常用的一些注解以及注解注入总结
  9. Macro definition of snprintf conflicts with Standard Library function declaration
  10. php开发第一课