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 list操作用法总结
Nov 10 Python
如何在Python中编写并发程序
Feb 27 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
tensorflow 环境变量设置方式
Feb 06 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
Python爬虫之爬取淘女郎照片示例详解
Jul 28 Python
python实现进度条的多种实现
Apr 29 Python
使用scrapy实现增量式爬取方式
Jun 21 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
python生成器的使用方法
2013/11/21 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Python如何测试stdout输出
2020/08/10 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
留学自荐信的技巧
2013/10/17 职场文书
语文教学感言
2014/02/06 职场文书
经典毕业生求职信
2014/07/12 职场文书
服务员岗位职责范本
2015/04/09 职场文书
Redis性能监控的实现
2021/07/09 Redis
Nginx配置https的实现
2021/11/27 Servers
详解nginx location指令
2022/01/18 Servers