位置: 编程技术 - 正文

Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程

编辑:rootadmin

推荐整理分享Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

rabbitmq中文翻译的话,主要还是mq字母上:Message Queue,即消息队列的意思。前面还有个rabbit单词,就是兔子的意思,和python语言叫python一样,老外还是蛮幽默的。rabbitmq服务类似于mysql、apache服务,只是提供的功能不一样。rabbimq是用来提供发送消息的服务,可以用在不同的应用程序之间进行通信。

安装rabbitmq先来安装下rabbitmq,在ubuntu .下可以直接通过apt-get安装:

安装好后,rabbitmq服务就已经启动好了。接下来看下python编写Hello World!的实例。实例的内容就是从send.py发送“Hello World!”到rabbitmq,receive.py从rabbitmq接收send.py发送的信息。

其中P表示produce,生产者的意思,也可以称为发送者,实例中表现为send.py;C表示consumer,消费者的意思,也可以称为接收者,实例中表现为receive.py;中间红色的表示队列的意思,实例中表现为hello队列。

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

安装pika

安装pika可以使用pip来进行安装,pip是python的软件管理包,如果没有安装,可以通过apt-get安装

通过pip安装pika:

send.py代码

连接到rabbitmq服务器,因为是在本地测试,所以就用localhost就可以了。

声明消息队列,消息将在这个队列中进行传递。如果将消息发送到不存在的队列,rabbitmq将会自动清除这些消息。

发送消息到上面声明的hello队列,其中exchange表示交换器,能精确指定消息应该发送到哪个队列,routing_key设置为队列的名称,body就是发送的内容,具体发送细节暂时先不关注。

关闭连接

完整代码

先来执行下这个程序,执行成功的话,rabbitmqctl应该成功增加了hello队列,并且队列里应该有一条信息,用rabbitmqctl命令来查看下

在笔者的电脑上输出如下信息:

确实有一个hello队列,并且队列里有一条信息。接下来用receive.py来获取队列里的信息。

receive.py代码

和send.py的前面两个步骤一样,都是要先连接服务器,然后声明消息的队列,这里就不再贴同样代码了。

接收消息更为复杂一些,需要定义一个回调函数来处理,这边的回调函数就是将信息打印出来。

Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程

告诉rabbitmq使用callback来接收信息

开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理。按ctrl+c退出。

完整代码

执行程序,就能够接收到队列hello里的消息Hello World!,然后打印在屏幕上。换一个终端,再次执行send.py,可以看到receive.py这边会再次接收到信息。

工作队列示例

1.准备工作(Preparation)

在实例程序中,用new_task.py来模拟任务分配者, worker.py来模拟工作者。

修改send.py,从命令行参数里接收信息,并发送

修改receive.py的回调函数。

这边先打开两个终端,都运行worker.py,处于监听状态,这边就相当于两个工作者。打开第三个终端,运行new_task.py

观察worker.py接收到任务,其中一个工作者接收到3个任务 :

另外一个工作者接收到2个任务 :

从上面来看,每个工作者,都会依次分配到任务。那么如果一个工作者,在处理任务的时候挂掉,这个任务就没有完成,应当交由其他工作者处理。所以应当有一种机制,当一个工作者完成任务时,会反馈消息。

2.消息确认(Message acknowledgment)

消息确认就是当工作者完成任务后,会反馈给rabbitmq。修改worker.py中的回调函数:

这边停顿5秒,可以方便ctrl+c退出。

去除no_ack=True参数或者设置为False也可以。

用这个代码运行,即使其中一个工作者ctrl+c退出后,正在执行的任务也不会丢失,rabbitmq会将任务重新分配给其他工作者。

3.消息持久化存储(Message durability)

虽然有了消息反馈机制,但是如果rabbitmq自身挂掉的话,那么任务还是会丢失。所以需要将任务持久化存储起来。声明持久化存储:

但是这个程序会执行错误,因为hello这个队列已经存在,并且是非持久化的,rabbitmq不允许使用不同的参数来重新定义存在的队列。重新定义一个队列:

在发送任务的时候,用delivery_mode=2来标记任务为持久化存储:

4.公平调度(Fair dispatch)

上面实例中,虽然每个工作者是依次分配到任务,但是每个任务不一定一样。可能有的任务比较重,执行时间比较久;有的任务比较轻,执行时间比较短。如果能公平调度就最好了,使用basic_qos设置prefetch_count=1,使得rabbitmq不会在同一时间给工作者分配多个任务,即只有工作者完成任务之后,才会再次接收到任务。

new_task.py完整代码

Python通过RabbitMQ服务器实现交换机功能的实例教程 快速回顾一下RabbitMQ服务器的安装:sudoapt-getinstallrabbitmq-serverPython使用RabbitMQ需要Pika库:sudopipinstallpika好了,接下来我们先看交换机的工作原理:消息发

Python操作RabbitMQ服务器实现消息队列的路由功能 Python使用Pika库(安装:sudopipinstallpika)可以操作RabbitMQ消息队列服务器(安装:sudoapt-getinstallrabbitmq-server),这里我们来看一下MQ相关的路由功能。路由

详解Python操作RabbitMQ服务器消息队列的远程结果返回 先说一下笔者这里的测试环境:Ubuntu.+Python2.7.4RabbitMQ服务器sudoapt-getinstallrabbitmq-serverPython使用RabbitMQ需要Pika库sudopipinstallpika远程结果返回消息发送端

标签: Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程

本文链接地址:https://www.jiuchutong.com/biancheng/386982.html 转载请保留说明!

上一篇:Python的消息队列包SnakeMQ使用初探(python消息队列感知消息被消费)

下一篇:Python通过RabbitMQ服务器实现交换机功能的实例教程(Python通过行和列提取数据)

  • 账本印花税的计税依据
  • 增值税专用发票有效期是多长时间
  • 增值税和城建税怎么算
  • 固定资产报废收入
  • 借款合同印花税减免优惠政策2022
  • 机票行程单上没有日期怎么回事
  • 有会计从业资格证还有用吗
  • 2019年所得税季度增值税怎么报
  • 货架折旧年限
  • 小规模普票专票税率一样吗
  • 培训发生的住宿费 差旅费可以放入职工教育经费吗
  • 我公司给对方公司付款
  • 银行捐款了吗
  • 增值税发票信息错误可以作废重开吗
  • 公司注册的费用记什么科目
  • 资本公积转增股本个人所得税
  • 事业单位只能开具0税率的普票
  • 通行费发票如何开具
  • 政府机构可以开对外营业的餐饮吗
  • 银行承兑汇票加工费合同
  • 税控盘第一次使用
  • 资产负债表应收账款是负数怎么回事
  • 确认并支付本年职工工资
  • 分公司发生修理费能否在总公司列支?
  • 固定资产报废处理流程图
  • 工资一定要通过应付工资科目吗
  • 如何删除win11的入门
  • 企业福利费支出范围
  • 社保费税前扣还是税后扣
  • Win10 KB5004945 更新后多个品牌打印机无法使用的解决方法
  • deepin下载教程
  • 尚未支付的货款用什么凭证
  • win10任务视图怎么用
  • 印花税会计分录2023
  • 汽车报废残值收入怎么做账
  • 什么是融资租赁型校园贷
  • 投资公司收到境外债务
  • 进项税额转出的所有会计分录
  • 营业店面装修费怎么入账
  • 地方各项基金费(工会经费)可以不申报吗
  • devtools vue
  • vue 路由
  • 前端分页显示
  • 基于VGGNet乳腺超声图像数据集分析
  • 对方代垫保险费算不算入账价值
  • 发票没有填写开户行,可以报销吗
  • 厂房转租会计分录
  • java中日志的作用
  • 事业单位政府拨款的会计分录
  • sQlite常用语句以及sQlite developer的使用与注册
  • mac安装brew
  • 银行承兑汇票进行贴现理财
  • 浅谈一下新冠的好处
  • 施工企业会计核算实验报告
  • 无形资产租金计入什么科目
  • 个人所得税申报数
  • 有形动产租赁属于经营租赁吗
  • 差旅费报销范围包括
  • 待抵扣进项税额和进项税额的区别
  • 个体生产经营所得税
  • 企业所得税季报与年报的关系
  • 公司转给其他公司的投资款
  • 个税多缴了纳税人怎么办
  • 结转是什么意思啊
  • 逾期未缴税款法律依据
  • 影响营业利润和利润总额的因素
  • 企业中的消费环境分析
  • 生活垃圾处理费标准
  • 开票软件备份在哪里
  • linux如何挂载iso文件
  • win10无法收到wifi
  • linux bash sh
  • Win10 Mobile Build 10586.xx将持续更新 WP8.1用户可直升最新版
  • win10开始菜单样式
  • win7硬盘访问权限怎么解除
  • python def用法理解
  • Javascript & DHTML 实例编程(教程)基础知识
  • 登录电子税务局显示时间错误如果解决
  • 三亚国税局各区领导班子
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设