博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ学习小结(一)—— Hello World [Python]
阅读量:3511 次
发布时间:2019-05-20

本文共 3238 字,大约阅读时间需要 10 分钟。

1. RabbitMQ介绍

本文所有客户端全部是基于Python,根据官网可以看出,Python有好几个扩展包可以使用:
RabbitMQ是一个消息代理。它的核心原理非常简单:接收和发送消息。RabbitMQ将发送消息和接收消息进行解耦,由此来实现应用程序的异步处理。如果将RabbitMQ视为一个服务,从大方向来看,RabbitMQ做了三件事情:
1.  收取请求
2.  存储请求信息
3.  分发请求
引用官网原文,你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处。在这个比喻中,RabbitMQ就扮演着邮箱、邮局以及邮递员的角色。

2. 名词解释

生产(Prouducing)意思就是发送,发送消息的应用程序就是一个(Prouducer),一般用“P”表示。
队列(Queue),生产者将消息发送给RabbitMQ,是指发送给RabbitMQ的一个队列。多个生产者可以同时给一个队列发送消息,同时多个消费者也可以同时从队列取消息。
消费者(Consuming)就是接收消息。一个消费者(Consumer)就是一个等待接收消息的应用程序

3. Hello World

Hello World实现一个最简单的程序,即一个生产者发送一条消息到RabbitMQ的队列,然后消费者读取消息并输出到屏幕上。基本逻辑是生产者(producer)把消息发送到一个名为“hello”的队列中。消费者(consumer)从这个队列中获取消息。
RabbitMQ使用的是AMQP协议。要使用她你就必须需要一个使用同样协议的库。python可以从以下几个库中选择,我们这里选择的是pika,和官网的例子是一致的。
使用Python自带工具pip进行安装,如何安装pip,可参考我的另外一篇。
安装pika
[tRabbitMQ@iZ250x18mnzZ ~]$ pip install pika==0.95Downloading/unpacking pika==0.95

发送消息程序

前面提到的生产者,也就是发送消息程序,分为以下几步处理:
1. 创建连接RabbitMQ服务
2. 建立通道
3. 创建队列
4. 发送消息
5. 关闭连接
整合代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2016-02-28 21:28:17# @Author  : mx (mx472756841@gmail.com)# @Link    : http://www.shujutiyu.com/# @Version : $Id$import osimport pikaconn = Nonetry:    # 获取连接    conn = pika.BlockingConnection(pika.ConnectionParameters('localhost'))    # 获取通道    channel = conn.channel()    # 在发送队列前,需要确定队列是否存在,如果不存在RabbitMQ将会丢弃,先创建队列    channel.queue_declare('hello')    # 在RabbitMQ中发送消息,不是直接发送队列,而是发送交换机(exchange),此处不多做研究,后面系列逐渐深入    ret = channel.basic_publish(exchange='',                                routing_key='hello',                                body="Hello, World!")    print " [x] Sent 'Hello World!'"    print retexcept Exception, e:    raise efinally:    if conn:        conn.close()

接收消息程序

前面提到的消费者,也就是接收消息程序,分为以下几步处理:
1. 创建连接
2. 建立通道
3. 创建队列(为防止队列不存在,队列存在也不会重新创建)
4. 接收消息(接收消息需要一个回调函数)
5. 启动程序,轮询等待消息
整合代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2016-02-29 16:30:21# @Author  : mx (mx472756841@gmail.com)# @Link    : http://www.shujutiyu.com/# @Version : $Id$import osimport pikaconn = Nonedef callback(ch, method, properties, body):    """        out body    """    print " [x] Recived ch {0}".format(ch)    print " [x] Recived method {0}".format(method)    print " [x] Recived properties {0}".format(properties)    print " [x] Recived %r" % (body, )try:    # get connection    conn = pika.BlockingConnection(pika.ConnectionParameters(        'localhost')    )    # get channel    channel = conn.channel()    # declare queue, 重复声明不会报错,但是没有队列的话直接取用会报错    channel.queue_declare('hello')    # get message    channel.basic_consume(callback, queue='hello', no_ack=True)    print ' [*] Waiting for messages. To exit press CTRL+C'    channel.start_consuming()except Exception, e:    raise efinally:    if conn:        conn.close()
注:关于回调函数的参数,后面用到的时候再逐个解析。
运行发送消息程序
[tRabbitMQ@iZ250x18mnzZ src]$ python send_helloworld.py  [x] Sent 'Hello World!'True
运行接收消息程序
[tRabbitMQ@iZ250x18mnzZ src]$ python recv_helloworld.py  [*] Waiting for messages. To exit press CTRL+C [x] Recived ch 
[x] Recived method
[x] Recived properties
[x] Recived 'Hello, World!'
运行程序启动后,一直在等待获取消息,可以通过Ctrl-C来中止。Hello World基本就结束了,基本知道RabbitMQ基本的使用方法,后续将会进一步对RabbitMQ的使用场景进行解析。

参考资料:

官网:
中文官网:

转载地址:http://lfbqj.baihongyu.com/

你可能感兴趣的文章
前端知识体系
查看>>
查找入职员工时间排名倒数第三的员工所有信息
查看>>
使用join查询方式找出没有分类的电影id以及名称
查看>>
Qt教程(2) : Qt元对象系统
查看>>
驱动开发误用指针错误:Unable to handle kernel NULL pointer dereference at virtual address
查看>>
Linux部署DocSystem知识/文件管理系统
查看>>
Centos7开机自启动脚本无法使用备用方案
查看>>
jvm虚拟机内存详解
查看>>
线程的创建方式
查看>>
DNS是什么
查看>>
mapreduce自定义分组、自定义分区、二次排序
查看>>
Hbase架构
查看>>
spark运行模式
查看>>
PaddleX的C++使用
查看>>
MyBatis-Plus代码生成器
查看>>
我的第一个SpringBoot项目(一)
查看>>
回文数
查看>>
伪背包问题!
查看>>
求10000以内n的阶乘!
查看>>
static关键字
查看>>