zoukankan      html  css  js  c++  java
  • 安装 rabbitmq ,通过生成器获取redis列表数据 与 Celery 分布式异步队列

     一、安装rabbitmq

    
    
     @全体成员 超简易安装rabbitmq文档


    1.安装配置epel源
    rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
     
    2.安装erlang
    yum -y install erlang
     
    3.安装RabbitMQ
    yum -y install rabbitmq-server


    4.启动服务
    centos6:
    service rabbitmq-server start

    centos7:
    systemctl start rabbitmq-server


    5.启动web管理插件
    rabbitmq-plugins enable rabbitmq_management

    6.重启rabbitmq生效web插件
    centos6:
    service rabbitmq-server restart

    centos7:
    systemctl restart rabbitmq-server


    rabbitmq 源码安装 官网地址:rabbitmq http:
    //www.rabbitmq.com/releases/rabbitmq-server/ 官网地址:erlang http://erlang.org/download/ 一、概念: Broker:简单来说就是消息队列服务器实体。    Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。    Queue:消息队列载体,每个消息都会被投入到一个或多个队列。    Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。    Routing Key:路由关键字,exchange根据这个关键字进行消息投递。    vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。    producer:消息生产者,就是投递消息的程序。    consumer:消息消费者,就是接受消息的程序。    channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。 二、安装RabbitMQ CentOS: 1.先安装erlang # PS: 注意安装操作首先要切换到root工作环节中 # 在命令 如果$ 表示是普通用户, yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel yum -y install ncurses-devel yum install ncurses-devel wget http://erlang.org/download/otp_src_19.3.tar.gz tar -xzvf otp_src_19.3.tar.gz cd otp_src_19.3 ./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe make && make install 配置erlang环境 vi /etc/profile #在最后添加下文 PATH=$PATH:/usr/local/erlang/bin 使环境变量生效 source /etc/profile 测试一下是否安装成功,在控制台输入命令erl crt+z 退出 2.安装rabbitmq wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.8/rabbitmq-server-3.5.8.tar.gz tar -zxvf rabbitmq-server-3.5.8.tar.gz cd abbitmq-server-3.5.8 make make TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin MAN_DIR=/usr/local/rabbitmq/man DOC_INSTALL_DIR=/usr/local/rabbitmq/doc install 配置erlang环境 vi /etc/profile #在最后添加下文 PATH=$PATH:/usr/local/erlang/bin:/usr/local/rabbitmq/sbin 使环境变量生效 source /etc/profile 3. 启动:rabbitmq-server rabbitmq-server start 4. 检查服务启动状态 [root@node01 ~]# netstat -lnpt|grep beam tcp 0 0 0.0.0.0:5672 0.0.0.0:* LISTEN 19733/beam tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 19733/beam tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 19733/beam [root@node01 ~]# # 表示启动成功 三、管理命令 启动:rabbitmq-server start 关闭:rabbitmqctl stop 状态:rabbitmqctl status 四、插件 启动web管理插件 rabbitmq-plugins enable rabbitmq_management 如果报错 错误解决: Error: {cannot_write_enabled_plugins_file,"/etc/rabbitmq/enabled_plugins", enoent} mkdir /etc/rabbitmq 重新启动输入地址:localhost:15672,帐号默认为guest,密码guest,此帐号默认只能在本机访问。不建议打开远程访问。你可以创建一个帐户,并设置可以远程访问的角色进行访问。 如: rabbitmqctl add_user supery 123 # 创建用户supery rabbitmqctl set_user_tags supery administrator # 给创建的supery用户administrator角色 五、用户管理 默认的guest帐户相当于root帐户 rabbitmqctl add_user username password 添加帐户 rabbitmqctl change_password username newpassword 修改密码 rabbitmqctl delete_user username 删除帐户 rabbitmqctl list_users 列出所有帐户 rabbitmqctl set_user_tags User Tag 设置角色(administrator、monitoring、policymaker、management、其它) 立即生效,不需重启 六、创建配置文件 [root@node01 ~]# ll /etc/rabbitmq/ total 8 -rw-r--r-- 1 root root 23 Mar 5 10:07 enabled_plugins -rw-r--r-- 1 root root 51 Mar 5 10:12 rabbitmq.config [root@node01 ~]# cat /etc/rabbitmq/rabbitmq.config [{rabbit, [{loopback_users, ["root","supery"]}]}]. 操作步骤: vi /etc/rabbitmq/rabbitmq.config 将[{rabbit, [{loopback_users, ["root","supery"]}]}]. 复制到文件中即可 esc :x 保存并退出 七、重启rabbitmq-server并测试访问 rabbitmqctl stop rabbitmqctl start 浏览器访问 1. 查看自己的服务器ip地址 ifconfig # inet addr:172.24.129.3 ===> 服务器ip地址 2. 浏览器访问 http://39.104.109.159:15672 ===> 输入用户密码登录即可 登录成功!完成

    二、生成器获取redis 数据

     

    操作redis 列表.

    import redis
    """
    redis = {
    
        k1:[1,2,3,43,45]
    }
    """
    
    conn = redis.Redis(host='47.94.172.250',port=6379,password='Luffy!4321')
    
    # 左插入
    # conn.lpush('k1',11)
    # 右插入
    # conn.rpush('k1',33)
    
    # 左获取
    # val = conn.lpop('k1')
    # val = conn.blpop('k1',timeout=10) # hang住
    
    # 右获取
    # val = conn.rpop('k1')
    # val = conn.brpop('k1',timeout=10) # hang住
    
    # conn.lpush('k1',*[11,22,33,44,55,66,77,88,99,66,666,2234,345234,234])
    def list_iter(key,count=100):
        index = 0
        while True:
            data_list = conn.lrange('k1', index, index+count-1)
            if not data_list:
                return
            index += count
    
            for item in data_list:
                yield item
    
    print(conn.lrange('k1',0,101))
    
    for item in list_iter('k1',count=3):
        print(item)

    二、celery 分布式消息队列

    Cerlery 是基于python 开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行。

      图2展示的是Celery的架构,它采用典型的生产生-消费者模式,主要由三部分组成:broker(消息队列)、workers(消费者:处理任务)、backend(存储结果)。实际应用中,用户从Web前端发起一个请求,我们只需要将请求所要处理的任务丢入任务队列broker中,由空闲的worker去处理任务即可,处理的结果会暂存在后台数据库backend中。我们可以在一台机器或多台机器上同时起多个worker进程来实现分布式地并行处理任务。

     1. 建立消息队列 

    首先,我们必须拥有一个broker消息对列用于发送和接收消息,celery官方给出了多个broker的备选方案:RabbitMQ,Redis, Database(不推荐)以及其他的消息中间件,在官方的推荐下,我们就使用RabbitMQ作为我们的消息中间件.在linux上安装的方式如下:

    (安装 链接https://www.cnblogs.com/grayguo/p/5300776.html)

    sudo apt-get install rabbitmq-server 

    命令执行成功后, rabbitmq-server就已经安装好并运行在后台了。

    也可以通过命令rabbitmq-server来启动rabbitmq server,以及命令rabbitmqctl stop 命令来停止server.

     
    linux安装rabbitmq方法
    Ubunt安装
    方法二:使用APT来装
    1.添加以下地址到/etc/apt/sources.list
    deb http://www.rabbitmq.com/debian/ testing main
     
    2:public key
    1
    $ wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc sudo apt-key add
    更新包
    
    1
    sudo apt-get update
    安装Rabbitmq-server
    
    1
    sudo apt-get install rabbitmq-server
    在rabbitmq安装的过程中,需要用到erlang,使用以上方法安装时,都可以自动安装这些必要的包
    1
    2
    启动:sudo rabbitmq-server start
    关闭: sudo rabbitmq-server stop
     

    2. 安装django-celery 

    pip install celery
    pip install django-celery
    

    3. 配置settings.py

     

      首先,在Django工程的settings.py文件中加入如下配置代码:

    import djcelery
    djcelery.setup_loader()
    BROKER_URL= 'amqp://guest@localhost//'
    CELERY_RESULT_BACKEND = 'amqp://guest@localhost//'
    

      

      其中,当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task。BROKER_URL和CELERY_RESULT_BACKEND分别指代你的Broker的代理地址以及Backend(result store)数据存储地址。在Django中如果没有设置backend,会使用其默认的后台数据库用来存储数据。注意,此处backend的设置是通过关键字CELERY_RESULT_BACKEND来配置,与一般的.py文件中实现celery的backend设置方式有所不同。一般的.py中是直接通过设置backend关键字来配置,如下所示:

    app = Celery('tasks', backend='amqp://guest@localhost//', broker='amqp://guest@localhost//')

      然后,在INSTALLED_APPS中加入djcelery:

    INSTALLED_APPS = (
        ……   
    'qv', 'djcelery' …… )

     4. 在要使用该任务队列的app根目录下(比如qv),建立tasks.py,比如:

      在tasks.py中我们就可以编码实现我们需要执行的任务逻辑,在开始处import task,然后在要执行的任务方法开头用上装饰器@task。需要注意的是,与一般的.py中实现celery不同,tasks.py必须建在各app的根目录下,且不能随意命名。

      5. 生产任务

      在需要执行该任务的View中,通过build_job.delay的方式来创建任务,并送入消息队列。比如:

      6. 启动worker的命令

     
    #先启动服务器
    python manage.py runserver
    #再启动worker 
    python manage.py celery worker -c 4 --loglevel=info

    四、补充

      Django下要查看其他celery的命令,包括参数配置、启动多worker进程的方式都可以通过python manage.py celery --help来查看:

     

       另外,Celery提供了一个工具flower,将各个任务的执行情况、各个worker的健康状态进行监控并以可视化的方式展现,如下图所示:

     

      Django下实现的方式如下: 

      1. 安装flower:

    pip install flower

      2. 启动flower(默认会启动一个webserver,端口为5555):

    python manage.py celery flower

      3. 进入http://localhost:5555即可查看。

  • 相关阅读:
    软件工程第十四周学习进度条
    软件工程第十五周学习进度条
    课堂练习-买书价格最低
    找水王2
    Struts结合马士兵视频的学习经验
    Spring结合马士兵视频的学习经验
    浅谈 《大型网站技术架构》 五六七章
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    浅谈架构漫谈
    软件架构设计师工作流程
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/9761831.html
Copyright © 2011-2022 走看看