zoukankan      html  css  js  c++  java
  • Celery的中间人-RabbitMQ

    RabbitMQ 是一个在AMQP(Advanced Message Queuing Protocol 高级消息队列协议)基础上完成的,可复用的企业消息系统,用Erlang(面向并发的编程语言)实现
    使用场景
    在项目中,将一些无需即时返回且消耗的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
    Ubuntu 安装
    sudo apt-get install rabbitmq-server
    Celery 使用RabbitMQ
    http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html#broker-rabbitmq

    服务器管理
    查看状态
    1.which rabbitmqctl 例如-> /usr/sbin/rabbitmqctl
    2.sudo /usr/sbin/rabbitmqctl status
    出现Status of node rabbit@ubuntu
    ...
    即为成功
    启动节点
    1.which rabbitmqctl 例如-> /usr/sbin/rabbitmqctl
    2.sudo /usr/sbin/rabbitmq-server
    如果启动失败了,请直接查看日志文件,一般日志文件存放在/var/log/rabbitmq下
    日志的文件名字为:rabbit@[hostname].log,其中rabbit为默认Erlang节点的名字,而hostname即为当前的主机名字。
    以后台进程的方式运行(安装成功后默认)
    1.which rabbitmqctl 例如-> /usr/sbin/rabbitmqctl
    2.sudo /usr/sbin/rabbitmq-server -detached
    关闭节点(永远不要使用KILL来停止RabbitMQ服务器,推荐使用下面的命令来停止RabbitMQ服务器)
    1.which rabbitmqctl 例如-> /usr/sbin/rabbitmqctl
    2.sudo /usr/sbin/rabbitmqctl stop
    注意:此时不仅关闭了Rabbit应用程序,同时也关闭了Erlang节点。
    有时只想关闭Rabbit应用程序,而保留Erlang节点继续为其他程序服务(特别是在集群或分布式环境中,一个Erlang系欸但上可能同时运行着其他Erlang程序,这样的关闭节点是不可取的)
    此时需要使用sudo ./rabbitmqctl stop_app 即可只关闭运行着的Rabbit 程序
    用户管理
    查看当前所有存在的用户列表
    sudo /usr/sbin/rabbitmqctl list_users

    (Celery http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html#broker-rabbitmq)
    1.创建RabbitMQ用户
    sudo rabbitmqctl add_user myuser mypassword
    2.添加IP
    sudo rabbitmqctl add_vhost myvhost
    3.添加标签 查看所有存在的用户列表是 [ ] 里面的内容(详细见下面用户角色
    sudo rabbitmqctl set_user_tags myuser mytag
    4.添加权限(-p 代表set_permissions作用在哪个host,三个点分别代表"配置","读","写",*是通配符)
    sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"
    5.删除用户
    sudo rabbitmqctl add_user delete myuser
    6.修改密码
    sudo rabbitmqctl add_user myuser newpassword
    替换适当的myuser, mypassword, newpassword及myvhost 值。
    ------------------------------------------------------RabbitMQ 扩展------------------------------------------------------
    概念说明
    Broker: 简单来说就是消息队列服务器的实体
    Exchange: 消息交换机,指定消息按什么规则,路由到哪个队列
    Queue: 消息队列载体,每个消息都会被投入到一个或多个队列
    Binding:绑定,它的作用就是把Exchange和Queue 按照路由规则绑定起来
    Routing Key: 路由关键字,Exchange 根据这个关键字进行消息投递
    vhost: 虚拟主机,一个broker 里可以开设多个vhost,用作不同用户的权限分离
    producer:消息生产者,就是投递消息的程序
    consumer: 消息消费者,就是接收消息的程序
    channel: 消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务
    消息队列的使用过程大概如下:
    1.客户端连接到消息队列服务器,打开一个channel
    2.客户端声明一个exchange,并设置相关属性
    3.客户端声明一个queue,并设置相关属性
    4.客户端使用routing key, 在exchange和queue之间建立好绑定关系
    5.客户端投递消息到exchange
    6.exchange接收到消息后,根据消息的key和已经设置的bingding,进行消息路由,将消息投递到一个或多个队列里
    交换机的类型
    Direct 完全根据Key 进行投递的交换机
    Topic 对Key 进行模式匹配后进行投递的交换机
    Fanout 不需要Key的交换机,采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列
    RabbitMQ的持久化
    1.exchange的持久化,在声明时指定durable=> 1
    2.queue的持久化,在声明时指定durable=>1
    3.消息持久化,在投递时指定delivery_mode=>2(1是非持久化)

    用户角色(managementplugin 管理插件)
    为用户添加系统预置的角色,为用户赋予角色,则用户也就拥有了所赋予的所有权限了,角色分为:
    1.超级管理员(administrator)
    可登录管理控制台(启用managementplugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作
    2.监控者(monitoring)
    可登录管理控制台(启用managementplugin的情况下),同时可以查看rabbitmq 节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
    3.策略制定者(policymaker)
    可登录管理控制台(启用managementplugin的情况下),同时可以对policy进行管理,但无法查看节点的相关信息
    4.普通管理者(management)
    仅可登录管理控制台(启用managementplugin的情况下),无法查看节点信息,也无法对策略进行管理
    5.其他
    无法登录管理控制台,通常就是普通的生产者和消费者
    服务器使用统计
    使用-p 选项,指定虚拟主机或路径信息,如果不添加该选项,那么rabbitmqctl 会将“/”作为默认的路径访问。
    查看队列
    查看默认虚拟机上所有队列列表(或查看指定虚拟机上所有的队列列表 )
    sudo /usr/sbin/rabbitmqctl list_queues(list_queues -p vhost1)
    查看属性特征名称:
    name 队列的名字
    messages 消息数目
    consumers 消费者数目
    memory 内存使用情况
    durable 是否持久化
    auto_delete 是否会被系统自动删除
    查看交换机
    查看默认虚拟机上所有交换机的信息列表
    sudo /usr/sbin/rabbitmqctl list_exchanges
    查看属性特征名称:
    name 交换机名字
    type 类型
    durable 是否持久化
    auto_delete 是否会被系统自动删除
    查看绑定到交换机的队列
    sudo /usr/sbin/rabbitmqctl list_bindings

  • 相关阅读:
    了解HTTP Header之User-Agent和HTTP协议的响应码
    怎样才算一个优秀的管理者
    ldpi、mdpi、hdpi、xhdpi、xxhdpi (无内容,待填)
    手把手教做小偷采集
    java中碰到无法解决的问题:无法访问类的getter访问器
    简单的加密解密处理
    Java中处理二进制移位
    Java中实现String.padLeft和String.padRight
    这短短几行代码价值一万
    从一篇文章中检查特定单词出现数量和第一次出现位置
  • 原文地址:https://www.cnblogs.com/yungiu/p/10207509.html
Copyright © 2011-2022 走看看