• Python RabbitMQ消息队列


    python内的队列queue
    •   线程 queue:不同线程交互,不能夸进程
    •   进程 queue:只能用于父进程与子进程,或者同一父进程下的多个子进程,进行交互
     注:不同的两个独立进程是不能交互的。
     
     
     
    RabbitMQ消息队列
    •   RabbitMQ是用erlang语言开发的。windos环境需要先安装erlang。
    •   BabbitMQ主要以中间件的形式,实现多个独立进程的代理,维护网络通信。
    •   此原理实现的软件有RabbitMQ,ZeroMQ,ActiveMQ。

    安装RabbitMQ

     

    • windos 安装完需要通过 管理-->服务-->RabbitMQ 开启服务
    • Linux 安装完 输入命令:rabbitmq-server start 开启服务

    windos 下RabbitMQsbin abbitmq-server:启动服务

    windos 下RabbitMQsbin abbitmqctl.bat:RabbitMQ管理工具

    执行RabbitMQ管理工具
    • RabbitMQ:启动插件、重启生效
    C:UsersAdministrator>"C:Program FilesRabbitMQ Server
    abbitmq_server-3.7.2s
    bin
    abbitmq-plugins.bat" enable rabbitmq_management
     
    • RabbitMQ:基本命令 
    rabbitmq的安装、启动和停止
    rabbitmq-service.bat install 
    rabbitmq-service.bat start 
    rabbitmq-service.bat stop 
     
     
    列出所有queue
    rabbitmqctl.bat list_queues
     
     
    列出指定queue的信息
    rabbitmqctl.bat list_queues [the queue name] messages_ready messages_unacknowledged
     
     
    列出所有exchange
    rabbitmqctl.bat list_exchanges
     
     
    列出所有binding
    rabbitmqctl.bat list_bindings
     
     
    安装基于web的管理插件
    rabbitmq-plugins.bat enable rabbitmq_management 
     
     
    查看所有队列信息
    添加用户:
    rabbitmqctl.bat add_user rainbird password
     
     
    添加权限:
    rabbitmqctl.bat set_permissions -p "/" rainbird ".*" ".*" ".*"
     
     
    删除测试用户:
    rabbitmqctl.bat delete_user guest
     
    python 内安装pika模块
    • 安装 http://www.rabbitmq.com/install-standalone-mac.html
    • 安装python rabbitMQ module 
    • pip install pika or easy_install pika or 源码 https://pypi.python.org/pypi/pika

    注:celery模块是分布式任务队列

     
    RabbitMQ队列
     

    send端

    #!/usr/bin/env python
    import pika
    
    # 通过实例创建socket
    connection = pika.BlockingConnection(
            pika.ConnectionParameters('localhost')
            )
    
    # 声明一个管道/在管道内发消息
    channel = connection.channel()
    
    # 管道内,声明一个队列,queue=queue的名字
    channel.queue_declare(queue='hello')
    
    # routing_key = queue的名字
    # bod = 消息内容
    # 一个消息不能直接发送到队列,它总是需要经过一个exchange。
    channel.basic_publish(exchange='',
                          routing_key='hello',
                          body='Hello World!')
    print(" [x] Sent 'Hello World!'")
    
    # 关闭队列
    connection.close()

    recv端

    #_*_coding:utf-8_*_
    __author__ = 'Alex Li'
    import pika
    
    # 实例话创建socket
    connection = pika.BlockingConnection(
            pika.ConnectionParameters('localhost'))
    
    # 声明一个管道/在管道内发消息
    channel = connection.channel()
    
    
    # 为什么再次声明queue名字:如果消费者先运行了,没有声明queue就会报错
    # 如果想要防止报错发生,就要定义queue。
    #
    # 管道内,声明一个队列,queue=queue的名字
    channel.queue_declare(queue='hello')
    
    # 回调函数
    # ch 管道内存对象地址
    # method 消息发给哪个queue
    # properties定义消息持久话对象
    # body数据对象
    def callback(ch, method, properties, body):
        print("-->",ch,method,properties)
        print(" [x] Received %r" % body)
    
    # 消费消息
    # callback 如果收到消息,就调用callback函数来处理消息
    # queue 管道内的队列名字
    # no_ack = True 这条消息出没处理完都不会给服务端发确认
    channel.basic_consume(
                        callback,
                        queue='hello',
                        no_ack=True)
    
    print(' [*] Waiting for messages. To exit press CTRL+C')
    
    # 启动后一直运行,没有数据会等待..
    channel.start_consuming()
  • 相关阅读:
    vim编辑器基本操作及文件权限,sudo命令等介绍
    centos的基本命令04
    linux的sed(增删改查)使用方法
    rm: cannot remove `xxx’: Operation not permitted问题的处理方案
    迅为iTOP-4412物联网开发板入门学习高手进阶项目开发超树莓派
    迅为I.MX6Q开发板配不同分辨率不同尺寸液晶屏幕
    iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板
    iTOP-4412开发板全新升级支持4G全网通模块
    迅为iMX6UL开发板低功耗高能效开发平台
    iTOP-4418/6818开发板支持双屏异显,双屏同显
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8289328.html
Copyright © 2020-2023  润新知