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

1,简介

RabbitMQ(Rabbit Message Queue)是流行的开源消息队列系统,用erlang语言开发。

1.1关键词说明:

Broker:消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

1.2消息队列运行机制:

(1)客户端连接到消息队列服务器,打开一个channel。
(2)客户端声明一个exchange,并设置相关属性。
(3)客户端声明一个queue,并设置相关属性。
(4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
(5)客户端投递消息到exchange。
(6)exchange接收到消息后,就根据消息的key和已经设置的binding,将消息投递到一个或多个队列里。

注:在声明一个队列后,如果将其持久化,则下次不需要进行声明,因为该队列已经在rabbitMQ中了!!!

例如下面的例子中都为首次声明一个队列!!!

1.3exchange类型:

1.Direct交换机
特点:依据key进行投递
例如绑定时设置了routing key为”hello”,那么客户端提交的消息,只有设置了key为”hello”的才会投递到队列。

2.Topic交换机
特点:对key模式匹配后进行投递,符号”#”匹配一个或多个词,符号” * ”匹配一个词
例如”abc.#”匹配”abc.def.ghi”,”abc.*”只匹配”abc.def”。

3.Fanout交换机
特点:不需要key,采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列

2.构建环境

2.1在windows环境下安装rabbitmq,教程如下:

http://jingyan.baidu.com/article/a17d5285173ce68098c8f2e5.html

2.2安装pika模块

python使用rabbitmq服务,可以使用现成的类库pika、txAMQP或者py-amqplib,这里选择了pika。

在命令行中直接使用pip命令:

pip install pika

3.示例测试

实例的内容就是从send.py发送消息到rabbitmq,receive.py从rabbitmq接收send.py发送的信息。

P表示produce,生产者的意思,也可以称为发送者,实例中表现为send.py;

C表示consumer,消费者的意思,也可以称为接收者,实例中表现为receive.py;

中间红色的表示队列的意思,实例中表现为hello队列。

send.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pika
import random

# 新建连接,rabbitmq安装在本地则hostname为‘localhost‘
hostname = ‘192.168.8.190‘
port=5672

credentials = pika.PlainCredentials(username=‘test‘,password=‘test‘)
parameters = pika.ConnectionParameters(host=hostname,port=port,credentials=credentials)
connection = pika.BlockingConnection(parameters=parameters)

# 创建通道
channel = connection.channel()
# 声明一个队列,生产者和消费者都要声明一个相同的队列,用来防止万一某一方挂了,另一方能正常运行
channel.queue_declare(queue=‘hello‘)

number = random.randint(1, 1000)
body = ‘hello world:%s‘ % number
# 交换机; 队列名,写明将消息发往哪个队列; 消息内容
# routing_key在使用匿名交换机的时候才需要指定,表示发送到哪个队列
channel.basic_publish(exchange=‘‘, routing_key=‘hello‘, body=body)
print " [x] Sent %s" % body
connection.close()

receive.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pika

hostname = ‘192.168.8.190‘
port=5672

credentials = pika.PlainCredentials(username=‘test‘,password=‘test‘)
parameters = pika.ConnectionParameters(host=hostname,port=port,credentials=credentials)
connection = pika.BlockingConnection(parameters=parameters)

# 创建通道
channel = connection.channel()
channel.queue_declare(queue=‘hello‘)

def callback(ch, method, properties, body):
    print " [x] Received %r" % (body,)

# 告诉rabbitmq使用callback来接收信息
channel.basic_consume(callback, queue=‘hello‘, no_ack=True)

# 开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理,按ctrl+c退出
print ‘ [*] Waiting for messages. To exit press CTRL+C‘
channel.start_consuming()

我们先运行send.py发送消息:

再运行receive.py接收消息:

原文地址:https://www.cnblogs.com/zhouxinfei/p/8322248.html

时间: 2024-10-10 08:46:01

python中RabbitMQ的使用(安装和简单教程)的相关文章

Python: Windows下pip的安装及简单应用

pip是一个用来管理和下载Python包的软件.通过pip,可以很容易就联网下载并安装需要的Python包到正确的位置,是一个很有用的软件. 由于自学的Python,刚开始需要下载第三方包的时候,总是被各种格式搞得头大.询问别人,别人就告诉个pip的命令,都说用这个就很方便就可以下载安装的.当时完全不知所云啊,因为看的Python入门那本书里压根没提过pip这个玩意.于是就百度了一下,终于知道了pip的基本用法. 写下此文,一方面是自己做个整理笔记,以备以后查看.另一方面,也希望有的初学Pyth

Python中基本的读文件和简单数据处理

Python中基本的读文件和简单数据处理 暂无评论 DataQuest上面的免费课程(本文是Python基础课程部分),里面有些很基础的东西(csv文件读,字符串预处理等),发在这里做记录.涉及下面六个案例: Find the lowest crime rate(读取csv文件,字符串切分,for循环和if判断过滤数据) Discover weather pattern in LA(for循环和if判断进行频数统计) Building a Spell Checker(词频统计,字符串预处理,字典

Python中scrapy框架如何安装配置

在python学习群里发现很多学习网络爬虫技术的童靴都搞不懂python爬虫框架scrapy的安装配置,在学习python网络爬虫初级阶段的时候我们利用urllib和urllib2库以及正则表达式就可以完成了,不过遇到更加强大的爬虫工具--爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows平台: 我的系统是Win7,首先,你要有Python,我用的是2.7.7版本,Python3相仿,只是一些源文件不同. 官网文档:http://doc.scrapy.org/en/l

Python中lxml模块的安装

lxml是Python中与XML及HTML相关功能中最丰富和最容易使用的库.lxml并不是Python自带的包,而是为libxml2和libxslt库的一个Python化的绑定.它与众不同的地方是它兼顾了这些库的速度和功能完整性,以及纯Python API的简洁性,与大家熟知的ElementTree API兼容但比之更优越!但安装lxml却又有点麻烦,因为存在依赖,直接安装的话用easy_install, pip都不能成功,会报gcc错误.下面列出来Windows.Linux下面的安装方法: [

python中使用文件的读取和简单正则使用(一)

p { margin-bottom: 0.25cm; line-height: 120% } 今天想写个程序合并文件的,以前一直觉得python的编码解码好烦,只要处理文件合并之类的都是用C# 写,但是最近用的是linux,也没有vs,就只能乖乖的用python 写了,早上看了下,也没有我想的负责,只能说以前太那啥了....好了,闲话少说,下面先简单介绍下文件读取操作吧. 首先说明的是我用的python2.7,python读取文件内容主要有下面几种常用方法:先来个测试,方面大家可以清晰了解每种方

python中如何使用pip安装自己的第三方模块

系统:CentOS6.8    python版本:python3.5 文本编辑器:vim python中我们很多时候,需要将自己的py文件导入到python路径中,但是我们自己的文件自身并不在python默认的库文件路径下,这时候就需要我们自己将我们的py文件import进入了 下面示例怎么导入自己的第三方模块,我们首先需要自己创建一个.py文件,名字随意明名了,但是不要和python内部模块重命,内部模块路径在/usr/lib/python3.5/site-packages.要不然使用pyth

Python中如何用pip安装外部主机文件

在python中安装非自带python模块,有三种方式: easy_install pip 下载压缩包(.zip, .tar, .tar.gz)后解压, 进入解压缩的目录后执行python setup.py install命令 本文主要针对pip安装时可能会碰到的一种情况,及解决办法: 假如我要安装pylint模块,该模块非python自带模块,用import肯定不能导入,需要额外安装 >>> import pylint Traceback (most recent call last)

python中列表、元组、字典简单介绍

简单说明一下,我之前接触过C++语言,Java语言,然后为了写自动化测试脚本又接触了python语言.虽然我不是编程大牛(开发人员).但是从我接触的这几个语言来说,如果你想学编程,以前又没有学习过,那么我真的挺建议大家去学习python的.我也理解了为什么会有一句话"人生苦短,我要用python" 首先说下这几个的定义: 1.列表(list):专门用于存储一串信息,列表用中括号[]定义,数据之间使用逗号,分隔 如图: 2.元组(Tuple):与列表类似,不同之处在于元组的元素不能修改,

python3.7 下easygui 0.98的安装和简单教程

安装方法 1.去官网下载最新版的ZIP包 发现是easygui-0.97.zip,没关系,解压到任意地方 找到easygui.py,拷贝进电脑Python安装目录下的Lib\site-packages文件夹下 这时打开IDLE,import easygui,回车,如果没报错,那就是识别到了. 但是运行时会报错,比如 AttributeError: module 'easygui' has no attribute 'msgbox' 不要急,这时打开cmd,直接输入: 输入pip uninstal