zoukankan      html  css  js  c++  java
  • python之路_RabbitMQ相关介绍

    一、什么是RabbitMQ?

      消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。

      rabbitMQ是一款基于AMQP协议的消息中间件,它能够在应用之间提供可靠的消息传输。在易用性,扩展性,高可用性上表现优秀。使用消息中间件利于应用之间的解耦,生产者(客户端)无需知道消费者(服务端)的存在。而且两端可以使用不同的语言编写,大大提供了灵活性。

    二、RabbitMQ安装

    '''
    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 rabbitmq-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      ===> 输入用户密码登录即可
        
    登录成功!完成
    '''

    三、工作模式

    1、简单模式

      生产者示例:

    # ######################### 生产者 #########################
    #!/usr/bin/env python
    import pika
    connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost'))
    
    channel = connection.channel()
    
    channel.queue_declare(queue='hello')
    
    channel.basic_publish(exchange='',
                          routing_key='hello',
                          body='Hello World!')
    
    print(" [x] Sent 'Hello World!'")
    connection.close()

      消费者示例:

    # ########################## 消费者 ##########################
     
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
    channel = connection.channel()
     
    channel.queue_declare(queue='hello')
     
    def callback(ch, method, properties, body):
        print(" [x] Received %r" % body)
     
    channel.basic_consume( callback,
                           queue='hello',
                           no_ack=True)
     
    print(' [*] Waiting for messages. To exit press CTRL+C')
    channel.start_consuming()

    2、exchange模型

    四、基于RabbitMQ的RPC

      详细内容请参考博客:http://www.cnblogs.com/yuanchenqi/articles/8507109.html

  • 相关阅读:
    六:Vue之父子组件间的三种通信方式
    五:Vue之ElementUI 表格Table与分页Pagination组件化
    四:Vue之VUEX状态管理
    三:Vue之混入(mixin)与全局混入
    二:Vue之ElementUI Form表单校验
    一:Vue之开发环境搭建
    变了,说不出来的感觉。
    20180320作业2:进行代码复审训练
    20180320作业1:源代码管理工具调查
    15软工课后作业02-15100120
  • 原文地址:https://www.cnblogs.com/seven-007/p/8509451.html
Copyright © 2011-2022 走看看