• 消息队列(message queue)


    最近纠结于一个问题,就是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.1-1.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的学习和研究

  • 相关阅读:
    聊聊Spark的分区、并行度 —— 前奏篇
    深入探讨HBASE
    分布式流平台Kafka
    GeoServer中使用SLD样式
    OpenLayer修改WFS中的要素
    leaflet加载GeoServer的WFS服务
    OL实现属性查询的功能
    OL3实现空间查询的代码示例
    WFS—GetFeature方法
    OpenLayer+Geoserver+postgis实现路径分析
  • 原文地址:https://www.cnblogs.com/forilen/p/4493449.html
Copyright © 2020-2023  润新知