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

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

windos 下RabbitMQ\sbin\rabbitmq-server:启动服务

windos 下RabbitMQ\sbin\rabbitmqctl.bat:RabbitMQ管理工具

执行RabbitMQ管理工具
  • RabbitMQ:启动插件、重启生效
C:\Users\Administrator>"C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.2\s
bin\rabbitmq-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()

Python RabbitMQ消息队列的更多相关文章

  1. Python RabbitMQ 消息队列

    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序 ...

  2. openresty 学习笔记番外篇:python访问RabbitMQ消息队列

    openresty 学习笔记番外篇:python访问RabbitMQ消息队列 python使用pika扩展库操作RabbitMQ的流程梳理. 客户端连接到消息队列服务器,打开一个channel. 客户 ...

  3. RabbitMQ消息队列(一): Detailed Introduction 详细介绍

     http://blog.csdn.net/anzhsoft/article/details/19563091 RabbitMQ消息队列(一): Detailed Introduction 详细介绍 ...

  4. RabbitMQ消息队列1: Detailed Introduction 详细介绍

    1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...

  5. (转)RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

    在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会 ...

  6. (转)RabbitMQ消息队列(六):使用主题进行消息分发

    在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因, ...

  7. (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  8. RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  9. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

随机推荐

  1. postgresql修改数据库编码

    update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'your_database'; 先用 \e ...

  2. java学习之路--面试之多线程基础

    Java多线程面试问题1. 进程和线程之间有什么不同?一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是 ...

  3. curl HTTP Header

      对于"User-Agent", "Cookie", "Host"这类标准的HTTP头部字段,通常会有另外一种设置方法.curl命令提供了 ...

  4. C++多态等知识点

    分清虚函数和纯虚函数的区别:(1).虚函数是函数前加关键字virtual,一般定义格式为:virtual 类型 函数名 (参数表){ 函数体 } (2).纯虚函数的生命格式为: virtual 类型 ...

  5. Codeforces 1090D - Similar Arrays - [思维题][构造题][2018-2019 Russia Open High School Programming Contest Problem D]

    题目链接:https://codeforces.com/contest/1090/problem/D Vasya had an array of n integers, each element of ...

  6. Postman 进阶(pre-request scripts&test script)

    Postman 进阶 1. pre-request scripts   pre-request scripts是一个关联了收藏夹内request,并且在发送request之前执行的代码片段.这对于在r ...

  7. 017-并发编程-Condition

    一.概述 任何一个Java对象,都拥有一组监视器方法,主要包括wait().notify().notifyAll()方法,这些方法与synchronized关键字配合使用可以实现等待/通知机制.使用这 ...

  8. java框架之SpringBoot(5)-SpringMVC的自动配置

    本篇文章内容详细可参考官方文档第 29 节. SpringMVC介绍 SpringBoot 非常适合 Web 应用程序开发.可以使用嵌入式 Tomcat,Jetty,Undertow 或 Netty ...

  9. 2018年工作终总结&规划

    收获满满的2018 收获总结: 1. 换了家有地区牌照的公司,薪酬涨了那么一点点,但是工作压力.强度下降不少,这样有更多时间来学习新知识. 2. 跟同事一起接了维护后台管理系统的私活,每个月多了一点点 ...

  10. 【UML】NO.53.EBook.5.UML.1.013-【UML 大战需求分析】- 组合结构图(Composition Structure Diagram)

    1.0.0 Summary Tittle:[UML]NO.52.EBook.1.UML.1.012-[UML 大战需求分析]- 交互概览图(Interaction Overview Diagram) ...