Windows 10 - Python 消息队列 RabbitMQ 学习总结 1


测试环境:

操作系统: Window 10
工具:Pycharm
Python: 3.7

消息队列的基本知识概述

什么是消息队列?

消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列(Message Queue —— MQ)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。

我认为这里的应用,应该是如 App、PC端软件之类的客户端应用软件,向服务端(服务器)发送消息
(客户端) 生产者 —(消息队列)—> 消费者 (服务端)

为何要使用消息队列的原因?

从上述中可以看出消息队列是一种应用间的异步协作机制,那什么时候需要使用 MQ 呢?

以常见的订单系统为例,用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用MQ ,在下单的主流程(比如扣减库存、生成相应单据)完成之后发送一条消息到 MQ 让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由MQ 推送消息),当发现 MQ 中有发红包或发短信之类的消息时,执行相应的业务逻辑。

以上是用于业务解耦的情况,其它常见场景包括最终一致性广播错峰流控等等。

理解消息队列服务器和 Web 服务器的关系

对于这里的理解是,以业务为优先考虑,所以才采用消息队列,比较参考下淘宝 双11,每秒订单破50万,这对于系统的性能需求来说,简直是个无底洞,所以利用到了消息队列,来满足业务的性能需求,是非常有必要的。再深入一点来说,可以认为订单是所谓的高并发操作,而红包,发短信等是延时操作,属于低并发操作,那么服务器要怎么处理高并发操作呢?那就是利用Web服务器的负载均衡服务,而处理低并发操作,就需要消息队列服务器来处理,比如 Rabbit MQ (兔子消息队列服务器)

题外:关于服务端和客户端的企业级理解

了解 Web 服务器

比较常用的 Web 服务器:ApacheNginx、Tomcat、Lighttpd、Zeus、IIS
Web服务器的开发语言链接:https://www.oschina.net/
可以通过此链接查找 Web 服务器的开发语言
eg:
在这里插入图片描述

在这里插入图片描述

了解 Web 框架和 Web 服务的区别

Web服务器(Web server)的主要作用是,接收客户端请求,而Web框架(Web framework)则是处理web服务器收到的请求,并生成HTML 内容,将生成的 HTML 内容传递给Web服务器,再由Web服务器返回给客户端 (浏览器)。

这里就不得不提到 Python 的 Web 框架 —— DjangoFlaskweb.py,这三个python Web 框架(框架排名链接),一般新手学习前三个就好了,其他的框架看自己兴趣能力了。

使用Web 框架的作用:是为了方便程序员高效搭建自动化创建 HTML 内容 —— 生成用户友好内容;

Web服务器(Web server)的主要作用:接收客户端请求;

对于框架和服务器B/S架构消息队列的个人理解:

使用 Web 服务器是对 Web 框架生成 HTML 内容和Web服务器接收消息及发送HTML内容进行一个功能独立。
生产的就交给生产商弄,快递的就交给物流公司弄,这样说比较容易理解,但还是差了点意思,深入一点就是,每次服务器的进程切换,会在生产HTML 内容的 Web 框架 和 接收消息与发送HTML内容的 Web服务器的两个进程间切换,那么在这切换的过程,有一段时间服务器是完全属于 Web 框架 和 Web服务器的这其中之一的进程的,具体来说,就是专门为它两者之一服务的,那么你就应该意识到,在那时服务器为它们两个中的一个进程服务,资源(多核芯片计算、内存,磁盘存储等等)都尽量为其中的一个进程服务,如果是很厉害的服务器(两个字昂贵)的话,就更能体现出其中的性能差距,所以对于B/S架构高并发操作,是一定一定需要一个高性能的Web 服务器来执行的。

这里的高性能就需要了解该Web 服务器是用什么编程语言写的,既然这里适用性能需求,那么使用 C/C++ 语言开发的 Web 服务器,就再好不过了,这个可以通过对比编程语言的性能速度,可以得出哪些 Web 服务器性能好,当然有时还得看情况使用哪种 Web 服务器。

列出性能前三的的编程语言:

  1. C
  2. C++
  3. Java
    后面我就不写了,可以到网上搜索一下,编程语言间的性能,当然不用考虑,想也知道,除了这几个编程语言写的 Web 服务器,大致就可以猜到其性能。

浏览器 B/S 架构的业务逻辑个人理解:

客户端 Brower (浏览器) —— 服务端 Server
在这里插入图片描述

RabbitMQ 是基于 Erlang 语言开发的消息队列系统

猜你喜欢

转载自blog.csdn.net/qq_42701659/article/details/123707659