Python rabbitMQ如何实现生产消费者模式


Posted in Python onAugust 24, 2020

(一)安装一个消息中间件,如:rabbitMQ

(二)生产者

sendmq.py

import pika
import sys
import time
 
# 远程rabbitmq服务的配置信息
username = 'admin' # 指定远程rabbitmq的用户名密码
pwd = 'admin'
ip_addr = '10.1.7.7'
port_num = 5672
 
# 消息队列服务的连接和队列的创建
credentials = pika.PlainCredentials(username, pwd)
connection = pika.BlockingConnection(pika.ConnectionParameters(ip_addr, port_num, '/', credentials))
channel = connection.channel()
# 创建一个名为balance的队列,对queue进行durable持久化设为True(持久化第一步)
channel.queue_declare(queue='balance', durable=True)
 
message_str = 'Hello World!'
for i in range(100000000):
  # n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
  channel.basic_publish(
    exchange='',
    routing_key='balance', # 写明将消息发送给队列balance
    body=message_str, # 要发送的消息
    properties=pika.BasicProperties(delivery_mode=2, ) # 设置消息持久化(持久化第二步),将要发送的消息的属性标记为2,表示该消息要持久化
  ) # 向消息队列发送一条消息
  print(" [%s] Sent 'Hello World!'" % i)
  # time.sleep(0.2)
connection.close() # 关闭消息队列服务的连接

运行sendmq.py文件,可以从以下方法查看队列中的消息数量。

一是,rabbitmq的管理界面,如下图所示:

Python rabbitMQ如何实现生产消费者模式

二是,从服务器端命令查看

rabbitmqctl list_queues

Python rabbitMQ如何实现生产消费者模式

(三)消费者

receivemq.py

import pika
import sys
import time
 
# 远程rabbitmq服务的配置信息
username = 'admin' # 指定远程rabbitmq的用户名密码
pwd = 'admin'
ip_addr = '10.1.7.7'
port_num = 5672
 
credentials = pika.PlainCredentials(username, pwd)
connection = pika.BlockingConnection(pika.ConnectionParameters(ip_addr, port_num, '/', credentials))
channel = connection.channel()
 
# 消费成功的回调函数
def callback(ch, method, properties, body):
  print(" [%s] Received %r" % (time.time(), body))
  # time.sleep(0.2)
 
 
# 开始依次消费balance队列中的消息
channel.basic_consume(queue='balance', on_message_callback=callback, auto_ack=True)
 
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming() # 启动消费

运行receivemq.py文件,可以从以下方法查看队列中的消息数量。

Python rabbitMQ如何实现生产消费者模式

或者

rabbitmqctl list_queues

延伸:

systemctl status rabbitmq-server.service # 状态
systemctl restart rabbitmq-server.service # 重启

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python fabric使用笔记
May 09 Python
bpython 功能强大的Python shell
Feb 16 Python
Python计算两个日期相差天数的方法示例
May 23 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
对python中的乘法dot和对应分量相乘multiply详解
Nov 14 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
python实现邮件发送功能
Aug 10 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 #Python
深入分析python 排序
Aug 24 #Python
超级实用的8个Python列表技巧
Aug 24 #Python
基于CentOS搭建Python Django环境过程解析
Aug 24 #Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 #Python
python3让print输出不换行的方法
Aug 24 #Python
Django3中的自定义用户模型实例详解
Aug 23 #Python
You might like
php内嵌函数用法实例
2015/03/20 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
Python实现约瑟夫环问题的方法
2016/05/03 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
Python rstrip()方法实例详解
2018/11/11 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
如何写出好的Java代码
2014/04/25 面试题
医学生自我评价
2014/01/27 职场文书
公司授权委托书范文
2014/08/02 职场文书
2014年就业工作总结
2014/11/26 职场文书
美丽心灵观后感
2015/06/01 职场文书
户外拓展训练感想
2015/08/07 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书