1 模式介绍

生产者-消费者模式是最简单的使用模式。

一个生产者P,给队列发送消息,一个消费者C来取队列的消息。

这里的队列长度不限,生产者和消费者都不用考虑队列的长度。

队列的模型图:

2 示例代码

生产者

 #!/usr/bin/env python
import pika parameters = pika.ConnectionParameters('localhost')
connection = pika.BlockingConnection(parameters)
channel = connection.channel() channel.queue_declare(queue='hello')
number = 0
while number < 5:
channel.basic_publish(exchange='', routing_key='hello', body="hello world: {}".format(number))
print(" [x] Sent {}".format(number))
number += 1 connection.close()

消费者

 #!/usr/bin/env python
import pika
import datetime parameters = pika.ConnectionParameters('localhost')
connection = pika.BlockingConnection(parameters)
channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): # 定义一个回调函数,用来接收生产者发送的消息
print("{} [消费者] recv {}".format(datetime.datetime.now(), body)) channel.basic_consume(callback, queue='hello', no_ack=True)
print('{} [消费者] waiting for msg .'.format(datetime.datetime.now()))
channel.start_consuming() # 开始循环取消息

执行输出

生产者输出:

[x] Sent 0
[x] Sent 1
[x] Sent 2
[x] Sent 3
[x] Sent 4

消费者输出:

2018-07-06 16:10:05.308371 [消费者] waiting for msg .
2018-07-06 16:10:10.028588 [消费者] recv b'hello world: 0'
2018-07-06 16:10:10.028588 [消费者] recv b'hello world: 1'
2018-07-06 16:10:10.028588 [消费者] recv b'hello world: 2'
2018-07-06 16:10:10.028588 [消费者] recv b'hello world: 3'
2018-07-06 16:10:10.028588 [消费者] recv b'hello world: 4'

3 队列信息

在web管理页面上查看,点击queues,可以看到:hello队列

python使用rabbitMQ介绍一(生产-消费者模式)的更多相关文章

  1. python使用rabbitMQ介绍二(工作队列模式)

    一模式介绍 第一章节的生产-消费者模式,是非常简单的模式,一发一收.在实际的应用中,消费者有的时候需要工作较长的时间,则需要增加消费者. 队列模型: 这时mq实现了一下几个功能: rabbitmq循环 ...

  2. RabbitMQ下的生产消费者模式与订阅发布模式

    所谓模式,就是在某种场景下,一类问题及其解决方案的总结归纳.生产消费者模式与订阅发布模式是使用消息中间件时常用的两种模式,用于功能解耦和分布式系统间的消息通信,以下面两种场景为例: 数据接入   假设 ...

  3. python使用rabbitMQ介绍五(话题模式)

    一.模式介绍 话题模式(Topic)基本思想和路由模式是一样的,只不过路由键支持模糊匹配,符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词 话题模式相当于消息的模糊匹配,或者按照正则匹配.其中 ...

  4. python使用rabbitMQ介绍四(路由模式)

    一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...

  5. python操作rabbitmq,实现生产消费者模型

    更多详情参考官方文档:https://www.rabbitmq.com/tutorials/tutorial-six-python.html 参考博客:https://blog.csdn.net/we ...

  6. 生产消费者模式与python+redis实例运用(中级篇)

    上一篇文章介绍了生产消费者模式与python+redis实例运用(基础篇),但是依旧遗留了一个问题,就是如果消费者消费的速度跟不上生产者,依旧会浪费我们大量的时间去等待,这时候我们就可以考虑使用多进程 ...

  7. Kafka下的生产消费者模式与订阅发布模式

    原文:https://blog.csdn.net/zwgdft/article/details/54633105   在RabbitMQ下的生产消费者模式与订阅发布模式一文中,笔者以“数据接入”和“事 ...

  8. 生产消费者模式与python+redis实例运用(基础篇)

    根据这个图,我们举个简单的例子:假如你去某个餐厅吃饭,点了很多菜,厨师要一个一个菜的做,一个厨师不可能同时做出所有你点的菜,于是你有两个选择:第一个,厨师把所有菜都上齐了,你才开始吃:还有一个选择,做 ...

  9. Python | 面试的常客,经典的生产消费者模式

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第23篇文章,我们来聊聊关于多线程的一个经典设计模式. 在之前的文章当中我们曾经说道,在多线程并发的场景当中,如果我 ...

  10. day11(多线程,唤醒机制,生产消费者模式,多线程的生命周期)

    A:进程: 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. B:线程: 线程是进程中的一个执行单元,负责当前进程中程序的执 ...

随机推荐

  1. HTML 练习实现鼠标移到用户图像展示更多信息

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ArcMap插件开发初识:Add In

    之前一直在做ArcEngine的相关开发,做的winform相关,新换了工作,又开始新的学习旅程! Add In 这个东西很早就知道有,但是一直没有用过,因为之前的公司有自己框架,接口,虽然我也是做插 ...

  3. Linux常用命令速查-用户管理

    ◆ 用户组 ◆ 查看当前用户所属的用户组 1 groups 查看所有用户组 123456789 [root@node2 ~]# cat /etc/group root:x:0:bin:x:1:daem ...

  4. Java核心技术第五章——1.类、超类、子类(1)

    1.定义子类: 关键字extends表明正在构造的新类派生与一个已存在的类.已存在的类称为超类.基类或父类:新类称为子类.派生类或孩子类.超类和子类是Java程序员最常用的两个术语(emmm~~我觉得 ...

  5. Linux 使用 top 命令查看系统的运行情况

    top命令显示界面 top命令默认在一个特定间隔(3秒)后刷新显示.要手动刷新,用户可以输入回车或者空格. top - 18:32:45 up 230 days, 2:01, 1 user, load ...

  6. Oracle AWRDD报告生成和性能分析

    我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...

  7. 《前端之路》之三 数组的属性 && 操作方法(下)

    咱们 接着上篇来讲- 7.slice() 从某个已有的数组返回选定的元素 经常用来将类数组转化成数组,这样做一方面可以利用现有的数组方法更加方便的处理,另一方面是处于性能的考虑 var f = fun ...

  8. 使用JDBC连接操作数据库

    JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成. JDBC ...

  9. java~springboot~gradle里的docker集成

    在springboot里,我们的task任务可以添加docker构建的功能,在gradle集成环境里,直接可以实现编译,测试,打包镜像的流水线作业,很是方便! 下面分享给大家,在gradle里添加do ...

  10. 用命令行撤销工作区的所有更改(修改文件&&新增文件)

    话说起来之前放弃工作区所有的更改,我一直都是直接用VSCode在workingTree的按钮,如下:   直到有一天我感觉这样不够酷,于是我试了git reset --hard. 然并卵,这个命令虽然 ...