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