绪论


这里的环境使用的是Mac OS X系统,所有的配置和使用都是基于Mac OS X 和Python 2.7 以及对应的pika库的。

RabbitMQ的安装和配置


安装部分

#brew install rabbitmq

配置和启动

#sudo brew services start rabbitmq
#sudo rabbitmqctl add_user admin admin "创建用户(username password)"
#sudo rabbitmqctl set_user_tags admin administrator "配置用户为超级管理员"
#sudo rabbitmqctl set_permissions -p '/' admin '.' '.' '.' " 配置权限"
#sudo brew services restart rabbitmq

Python 与 pika


安装pika

#sudo pip install pika

Python与RabbitMQ的配合(基础)

# -*- coding:utf-8 -*-

import pika

class RabbitMQ(object):
"""一个简单的RabbitMQ的库,为了学习pika库"""
def __init__(self,host='127.0.0.1',port=5672,username=None,password=None):
"""
创建RabbitMQ的一个简单连接发起对象,参数如下
(1)配置host,也就是RabbitMQ的IP地址.默认是127.0.0.1;
(2)配置port,也就是RabbitMQ的端口信息,默认是5672;
(3)可以配置用户名username、口令password,默认是None。
"""
if username != None and password != None:
try:
self.Credentials = pika.PlainCredentials(username,password)#创建认证信息对象
self.ConnectionKeys = pika.ConnectionParameters(host,port,'/',self.Credentials)#根据认证信息对象创建连接函数参数
except Exception:
raise
else:
self.ConnectionKeys = None
def _connection(self):
"""发起连接的函数"""
try:
if self.ConnectionKeys == None:
self.connection = pika.BlockingConnection()#无配置信息的连接
else:
self.connection = pika.BlockingConnection(self.ConnectionKeys)#有配置信息的连接
except Exception:
raise
def _channel(self):
"""创建频道(游标)的函数"""
self.channel = self.connection.channel()#创建频道(游标)
def _callback(channel,method,properties,body):
"""callback函数,返回body体"""
print "[+] Received Message:%s"%body
def connect(self):
"""实例调用的连接接口"""
self._connection()
self._channel()
def create_queque(slef,flag,durableflag=False):
"""创建一个新队列,flag是队列名称,durablflag是是否永久化的标志位,True表示永久化,False表示不是永久化"""
try:
self.channel.queue_declare(queue=flag,durable=durableflag)#创建新的消息队列
except Exception:
raise
def set_queue_number(count):
try:
self.channel.basic_qos(prefetch_count=count)#每个worker每次count个消息
except Exception:
raise
def commit(self):
"""确认函数"""
try:
self.channel.basic_ack(delivery_tag=method.delivery_tag)#回发确认报文
except Exception:
raise
def
def product(self,flag,content,exchange=''):
"""生产消息,flag是消息队列名称,content是消息队列内容"""
try:
self.channel.basic_publish(exchange='',routing_key=flag,body=content)#发送消息进入消息队列
except Exception:
raise
def consume(slef,funcname=self._callback,flag,ackflag):
"""消费消息,flag是队列名称,ackflag是no_ack的标志位,True代表消息确认关闭"""
"""
消息确认,是指在consumer收到一个消息但是还没有处理完成就死掉了的情况下,这个消息会回到消息队列里;
"""
try:
self.channel.basic_consume(callback=funcname,queue=flag,no_ack=ackflag)#从队列获取消息
except Exception:
raise
def close(self):
"""关闭连接"""
try:
self.connection.close()#关闭连接
except Exception:
raise

RabbitMQ的安装和使用Python连接RabbitMQ的更多相关文章

  1. python连接RabbitMQ

    安装PIP wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz tar -xzvf pip-.tar.g ...

  2. RabbitMQ windows 安装后 此时不应有 \RabbitMQ。

    在安装过程中,如果细心实际上在安装的细节显示starting Service后就已经提示这个问题,实际上就是没有注册到RabbitMQ这个服务. 在研究了很久之后才发现原来是安装路径的问题,原先是安装 ...

  3. python中RabbitMQ的使用(安装和简单教程)

    1,简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从"生产者"接收消息 ...

  4. Python与RabbitMQ交互

    RabbitMQ 消息队列 成熟的中间件RabbitMQ.ZeroMQ.ActiveMQ等等 RabbitMQ使用erlang语言开发,使用RabbitMQ前要安装erlang语言 RabbitMQ允 ...

  5. rabbitMQ的安装和配置(一)

    erlang是一门面向并发的编程语言,流行的消息队列rabbitMQ是基于erlang环境运行的: 系统环境 操作系统:oracle-linux7.3 erlang版本:otp_src_20.0 下载 ...

  6. rabbitMQ之安装和配置(一)

    前言 erlang是一门面向并发的编程语言,流行的消息队列rabbitMQ是基于erlang环境运行的: 下载安装erlang语言环境 源码安装 # 从官网下载,在任何目录下,使用root权限 wge ...

  7. 【python】-- RabbitMQ 安装、基本示例、轮询机制

    RabbitMQ MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可 ...

  8. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  9. Python之RabbitMQ操作

    RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”,期间可根据规则路由.缓存.持久化消息.“生产者”也即message发送者以下简称P,相对应的“消费者”乃message接收者 ...

随机推荐

  1. php 抽象 继承 多态

    1.继承和重载 !!!php中使用extends单一继承的方法 被继承的类  父类(基类) 继承者   子类(派生类) 如果说我们需要将父类方法重载(方法覆盖),在派生类里使用与基类方法重名的方法名称 ...

  2. java中Scanner的nextLine()和next()的区别

    首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后 ...

  3. 模式识别之线性判别---naive bayes朴素贝叶斯代码实现

    http://blog.csdn.net/xceman1997/article/details/7955349 http://www.cnblogs.com/yuyang-DataAnalysis/a ...

  4. NSArray打印汉字的方法

    (1) NSArray打印汉字 通过重载NSArray的- (NSString *)descriptionWithLocale:(id)locale方法 方法体例如以下: //依据设置的locale ...

  5. html5简单拖拽实现自动左右贴边+幸运大转盘

    此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: ​ 在网上找了很多移动端拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是 ...

  6. jquery+json实现分页效果

    son作为一种轻量级的数据交换格式,由于其传输数据格式的方便性,今天偶然想将其应用于分页实现,分页做为web开发一个长久的话题,其应用的高效与重要性就不多说了本文主要技术:反射机制,Json数据格式, ...

  7. 基于.Net实现前端对话框和消息框

    关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局等等一些本可以使用插件的.好了,废话不 ...

  8. C#获取IP信息

    /// <summary> /// 通过IP得到IP所在地省市(Porschev) /// </summary> /// <param name="ip&quo ...

  9. VC++ :实现简单的文件拖放(Drag and Drop)功能

    1) VC++ 6.0 新建一个基于对话框的MFC的工程,取名MfcDropFiles: 2) 去除默认的控件,包括确定/取消按钮,以及一个静态文本: 3) 在对话框空白区域拖放一个ListBox控件 ...

  10. 阿里巴巴Java开发规约插件-体验

    插件有哪些功能? 阿里技术公众号于今年的2月9日首次公布<阿里巴巴Java开发规约>,瞬间引起全民代码规范的热潮,上月底又发布了PDF的终极版,大家踊跃留言,期待配套的静态扫描工具开放出来 ...