Python有多种插件都支持RabbitMQ,本文介绍的是RabbitMQ推荐的Pika插件。使用pip直接安装即可 pip install pika 。

一、RabbitMQ简介

1. MQ简介

MQ(Message Queue,消息队列),是一个在消息传输过程中保存消息的容器,多用在分布式系统之间进行通信。

MQ优势

  • 应用解耦:提高系统容错性和可维护性。
  • 异步提速:提升用户体验和系统吞吐量,MQ可短时间接收和保存大量消息(请求),其他服务可以异步地进行消息的消费。
  • 削峰填谷:提高系统稳定性,当MQ中保存了大量消息(请求)后,其他服务就可以按照自身的需要从容地对MQ中的消息进行消费,而不必直接去处理大量请求(短时间内的大量请求在横轴为时间、纵轴为请求量的图上就是峰顶)。

MQ劣势

  • 如果使用MQ的话,MQ就属于系统引入的外部依赖,一旦MQ宕机,就会对业务造成影响。

2. RabbitMQ简介

AMQP(Advanced Message Queuing Protocol,高级消息队列协议),是一个网络协议,同时也是一个应用协议的开放标准,专为面向消息的中间件而设计。RabbitMQ是基于AMQP并使用Erlang语言开发的消息中间件,在安装RabbitMQ时如果没有安装Erlang的话,需要根据提示下载并安装Erlang。当前有多种语言都有对应的插件来支持RabbitMQ的使用,包括Java、Python、Ruby等,本文主要介绍通过Python操作RabbitMQ。

RabbitMQ相关概念

  • Broker:接收和分发消息的应用,RabbitMQ Server就是Message Broker。
  • Virtual host:出于多租户和安全因素的设计,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念,当多个不同的用户使用同一个RabbitMQ Server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。
  • Connection:publisher/consumer和broker之间的TCP连接。
  • Channel:如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销都将是巨大的,效率也是非常低的。Channel是在Connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread会创建单独的Channel进行通信,AMQP的method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection,极大减少了操作系统建立TCP连接的开销。

Windows上RabbitMQ安装

详细安装过程可见

Python三方库:Pika(RabbitMQ基础使用) - 山上下了雪-bky - 博客园Python有多种插件都支持RabbitMQ,本文介绍的是RabbitMQ推荐的Pika插件。使用pip直接安装即可 pip install pika 。 一、RabbitMQ简介 1. MQ简介 Mhttps://www.cnblogs.com/guyuyun/p/14970592.html

直接按照上边的步骤一步一步执行即可

在程序安装过程中可能会无法直接安装还需要在系统上下载另一个软件辅助安装--erlang

下载地址如下

Downloads - Erlang/OTPThe official home of the Erlang Programming Languagehttps://www.erlang.org/downloads

选择64位直接安装即可,安装过程比较简单就不展示了

RabbitMQ六种模式

六种模式分别为Hello world、Work queues(工作队列)、Publish/Subscribe(发布订阅)、Routing(路由)、Topics(主题)、RPC(远程调用),处了RPC模式外,其余的模式都是从简单的使用到更为灵活的使用,其实从示例代码就可以看出,基本的代码框架都是差不多的,只是在不同的模式下达到的效果不同,它们各有各的特点,在实际使用中应该根据需求来选择具体的模式,而不是简单粗暴的选择最“高端”的模式。

1. Hello world模式

Hello world模式是最简单的一种模式,一个producer发送message,另一个consumer接收message。

2. Work queues模式

Work queues模式即工作队列模式,也称为Task queues模式(任务队列模式),这个模式的特点在于,同一个queue可以允许多个consumer从中获取massage,RabbitMQ默认会从queue中依次循环的给不同的consumer发送message。与Hello world模式相比,工作队列模式在示例代码中有些许不同

3. Publish/Subscribe模式

相对于工作/任务模式中的一个message只能发送给一个consumer使用,发布订阅模式会将一个message同时发送给多个consumer使用,其实就是producer将message广播给所有的consumer。

4. Routing模式

路由模式中,exchange类型为direct,与发布订阅模式相似,但是不同之处在于,发布订阅模式将message不加区分广播给所有的绑定queue,但是路由模式中,允许queue在绑定exchange时,同时指定 routing_key ,exchange就只会发送message到与 routing_key 匹配的queue中,其他的所有message都将被丢弃。当然,也允许多个queue指定相同的 routing_key ,此时效果就相当于fanout类型的发布订阅模式了。

5. Topics模式

主题模式的exchange类型为topic,相较于路由模式,主题模式更加灵活,区别就在于它的routing_key可以带通配符 * (匹配一个单词)和 # (匹配0个或多个单词),每个单词以点号分隔,但注意,routing_key的总大小不能超过255个字节。

如果一个message同时匹配了多个queue中的routing_key,那这几个queue都会收到这个message,如果一个message同时匹配了一个queue中的多个routing_key,那这个queue也只会接收一次这条message,如果一个message没有匹配上任何routing_key,那么这个message将被丢弃。

如果routing_key定义为 # (就只有这一个通配符),那么这个queue将接收所有message,就像exchange类型为fanout的发布订阅模式一样,如果routing_key两个通配符都没有使用,那么这个queue将会接收固定routing_key的message,就像exchange类型为direct的路由模式一样。

producer端:从代码上讲,producer的代码与路由模式没什么区别,只不过在routing_key的传值上需要注意与想要发送到的queue进行匹配。

6. RPC模式

RPC远程调用(Remote Procedure Call)模式其实就是使用消息队列处理请求的一种方式,通常请求接收到后会立即执行且多个请求是并行执行的,如果一次性来了太多请求,达到了服务端处理请求的瓶颈就会影响性能,但是如果使用消息队列的方式,最大的一点好处是可以不用立即处理请求,而是将请求放入消息队列,服务端只需要根据自己的状态从消息队列中获取并处理请求即可。

producer端:RPC模式的客户端(producer)需要使用到两个queue,一个用于发送request消息(此queue通常在服务端声明和创建),一个用于接收response消息。另外需要特别注意的一点是,需要为每个request消息指定一个uuid(correlation_id属性,类似请求id),用于识别返回的response消息是否属于对应的request。

具体代码以及各个方法不同以及相同之处可以参考

Python三方库:Pika(RabbitMQ基础使用) - 山上下了雪-bky - 博客园Python有多种插件都支持RabbitMQ,本文介绍的是RabbitMQ推荐的Pika插件。使用pip直接安装即可 pip install pika 。 一、RabbitMQ简介 1. MQ简介 Mhttps://www.cnblogs.com/guyuyun/p/14970592.html

一般在开发过程中前五种是比较常用的,第六种做一下了解即可

在使用过程中常见的报错

1.可能在使用过程中无法启动rabbitmq服务,一般出现这种情况是由于我们在初始化rabbitmq服务的时候未给用户权限

我们可以登陆上http://localhost:15672/rabbitmq服务的web网页进行权限的设置

根据上图提示将权限设置一下即可解决

2. pika.exceptions.ChannelClosed: (406, “PRECONDITION_FAILED - parameters for queue ‘test_persistent’ in vhost ‘/’ not equivalent”)
这个问题的描述是你的队列持久化的值不一致导致的

这是因为生产者和消费者当中队列的durable的参数不一致,大多数情况是修改了其中的一个参数,忘记修改另一个参数了

将队列的声明语句改成这样: channel.queue_declare(queue=my_queue, durable=True)
注意:在生产者和消费者的代码中都要同时修改队列中durable的参数,durable=True.

Python三方库:RabbitMQ基本使用相关推荐

  1. 离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中)

    离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中) 参考文章: (1)离线安装python第三方库的实用方法:解决公 ...

  2. 不是python中用于开发用户界面的第三方库-Python三方库:wxPython(GUI图形用户界面)...

    wxPython是一套基于Python的第三方GUI插件,可用Python制作丰富的图形化界面程序. 安装:pip install wxPython 或者 网站下载安装https://pypi.org ...

  3. python安装第三方库win10_音频处理 windows10下python三方库librosa安装教程

    librosa是处理音频库里的opencv,使用python脚本研究音频,先安装三方库librosa. 如下通过清华镜像源安装librosa: pip install -i https://pypi. ...

  4. python安装第三方库re_音频处理 windows10下python三方库librosa安装教程

    librosa是处理音频库里的opencv,使用python脚本研究音频,先安装三方库librosa. 如下通过清华镜像源安装librosa: pip install -i https://pypi. ...

  5. Python三方库之:psutil库学习

    Python三方库之:psutil库学习 1.描述 psutil(python system and process utilities)可以直接获取计算机CPU,内存,磁盘,网络等资源使用情况,可以 ...

  6. C++调用Python及间接调用Python三方库

    本文章目的是脱离安装Python环境的前提下,由C++程序调用Python程序及Python相关三方库 1.移植Python解释器 Python环境的目录结构 红色部分是生成路径下解释器运行时依赖 将 ...

  7. 音频处理 windows10下python三方库librosa安装

    librosa是处理音频库里的opencv,使用python脚本研究音频,先安装三方库librosa. 如下通过清华镜像源安装librosa: pip install -i https://pypi. ...

  8. python三方库之BeautifuSoup

    html文档解析的三方库beautifulsoup4 什么是beautifulsoup? 学习资源:https://www.crummy.com/software/BeautifulSoup/bs4/ ...

  9. python 三方库字典

    参考:https://github.com/jobbole/awesome-python-cn 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 ...

最新文章

  1. 最近做手机端,GPS,微信QQ分享总结的问题
  2. git stash封存分支 以及关于开发新功能的处理
  3. Android编译笔记三
  4. Wirshark 显示过滤器
  5. Discuz!NT 缓存设计简析 [原创]
  6. 我的Go+语言初体验——(6)整型有理数数据类型
  7. 【软件测试】测试计划书
  8. LeetCode--5.最长回文子串(滑动窗口)
  9. 【Redis】 redis hash getKey getValue 两个的性能差别
  10. 抖音为什么能让人上瘾?
  11. c语言扣血题目,食品分析复习题(改)
  12. 分享一组我在ins上收集的程序员最爱桌面壁纸
  13. 从零开始SpringCloud Alibaba实战(47)——阿里开发手册泰山版学习笔记一 命名风格
  14. 运用flask框架发送短信验证码的流程及具体代码
  15. 网络服务器主机和普通家用电脑主机的区别在哪里?
  16. 一种简单的图像白平衡计算方法
  17. iphone,ipad尺寸汇总
  18. 商业虚拟专用网络技术十二 BGP/MPLS
  19. 博客营销的一般流程及案例
  20. HTML内核超炫酷北漂鱼引导页源码

热门文章

  1. python按行拆分表格_Python将单元格中的多个值拆分为多行
  2. python Pyside2模块详细介绍(一)
  3. 前端代码规范,vue 代码规范
  4. 字符编码、Unicode原理、数据流压缩Zlib与Miniz的实现
  5. bitset的使用方法
  6. 中国电子商务网经的盈利策略
  7. 变频器在恒压供水控制系统中的应用
  8. echars基本使用
  9. 梯度提升树(GBDT)详解之一:回归举例
  10. Linux | 可重入函数 | volatile | SIGCHLD信号