RabbitMQ的安装和使用Python连接RabbitMQ
绪论
这里的环境使用的是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的更多相关文章
- python连接RabbitMQ
安装PIP wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz tar -xzvf pip-.tar.g ...
- RabbitMQ windows 安装后 此时不应有 \RabbitMQ。
在安装过程中,如果细心实际上在安装的细节显示starting Service后就已经提示这个问题,实际上就是没有注册到RabbitMQ这个服务. 在研究了很久之后才发现原来是安装路径的问题,原先是安装 ...
- python中RabbitMQ的使用(安装和简单教程)
1,简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从"生产者"接收消息 ...
- Python与RabbitMQ交互
RabbitMQ 消息队列 成熟的中间件RabbitMQ.ZeroMQ.ActiveMQ等等 RabbitMQ使用erlang语言开发,使用RabbitMQ前要安装erlang语言 RabbitMQ允 ...
- rabbitMQ的安装和配置(一)
erlang是一门面向并发的编程语言,流行的消息队列rabbitMQ是基于erlang环境运行的: 系统环境 操作系统:oracle-linux7.3 erlang版本:otp_src_20.0 下载 ...
- rabbitMQ之安装和配置(一)
前言 erlang是一门面向并发的编程语言,流行的消息队列rabbitMQ是基于erlang环境运行的: 下载安装erlang语言环境 源码安装 # 从官网下载,在任何目录下,使用root权限 wge ...
- 【python】-- RabbitMQ 安装、基本示例、轮询机制
RabbitMQ MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可 ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- Python之RabbitMQ操作
RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”,期间可根据规则路由.缓存.持久化消息.“生产者”也即message发送者以下简称P,相对应的“消费者”乃message接收者 ...
随机推荐
- 初学 Spring boot 报错 Whitelabel Error Page 404
按照教程,写了个最简单的 HelloWorld,尼玛报错 -->Whitelabel Error Page 404. 网上99%都是项目结构不对,说什么 Application放在父级 pack ...
- font-face自定义字体
做网站的时候,有时候会遇到某些字体系统里面没有自带.可能更多的时候我们会选择以图替文的方式来做.用图片的话不利于图片的放大缩小,更好的办法是我们可以自定义字体. 当然,在实际运用中我们需要权衡一下自定 ...
- C++ 的一个问题的理解(私有变量成员)
class CExample { public: CExample(){pBuffer=NULL; nSize=;} ~CExample(){delete pBuffer;} CExample(con ...
- thinkphp 自动跟新时间
看了很多文章和资料了,明白何为真传一句话了... 模板里: <input type="text" name="time" value="{:da ...
- DirectoryEntry 账户启动与停用 以及创建账户等
启动账户: DirectoryEntry usr = new DirectoryEntry("LDAP://CN=New User,CN=users,DC=fabrikam,DC=com&q ...
- Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图
接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...
- 比較JS合并数组的各种方法及其优劣
原文链接: Combining JS Arrays原文日期: 2014-09-09翻译日期: 2014-09-18翻译人员: 铁锚 本文属于JavaScript的基础技能. 我们将学习结合/合并两个 ...
- Python的可变对象与不可变对象。
参考:http://thomaschen2011.iteye.com/blog/1441254 Python基础:Python可变对象和不可变对象 http://blog.jobbo ...
- 转载:mysql 操作总结 INSERT和REPLACE
转自:http://www.jb51.net/article/19411.htm 用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做 ...
- 学习 TList 类的实现[3] - 不能回避的话题: 内存分配
在 Delphi 中, 几乎所有的类型都有对应的指针类型, 譬如: Char PChar Word PWORD Double PDouble TPoint PPoint 甚至一种类型对应这着几种指针类 ...