app开发定制RabbitMQ到底是什么?

📢📢📢📣📣📣

哈喽!大家好,我是【一心同学】,app开发定制一位上进心十足的【Java领域博主】!😜😜😜

✨【一心同学】的写作风格:喜欢用【通俗易懂】app开发定制的文笔去讲解每一个知识点,app开发定制而不喜欢用【高大上】app开发定制的官方陈述。

q

✨【一心同学】博客的领域是【app开发定制面向后端技术】的学习,app开发定制未来会持续更新更多的【后端技术】以及【学习心得】。

✨如果有对【后端技术】感兴趣的【小可爱】,欢迎关注一心同学】💞💞💞

❤️❤️❤️app开发定制感谢各位大可爱小可爱!❤️❤️❤️ 


目录


一、MQ是什么?

MQ的全称是Message Queue,也就是消息队列,MQapp开发定制是一种应用间的通信方式,app开发定制消息发送后可以立即返回,app开发定制由消息系统来确保消息app开发定制的可靠传递。app开发定制消息发布者只管把消息发布到 MQ app开发定制中而不用管谁来取,app开发定制消息使用者只管从 MQ app开发定制中取消息而不管是谁发布的。这样app开发定制发布者和使用者都不用app开发定制知道对方的存在

二、MQapp开发定制的使用场景

2.1 异步处理

🚀 app开发定制易错概念讲解

并发:app开发定制指应用能够交替执行不同的任务,例如在一段时间内,我们一边吃饭,一边喝水,这两个是交替进行的。

并行:指应用能够同时执行不同的任务,例如我们在一段时间内,我们一边吃饭,一边泡脚,是同时进行的。

异步强调任务的异步执行,例如到一家餐馆,来第一位客人,点什么,点鱼,给它一个牌子,让他去一边等吧,下一位客人接着点菜,点完接着点让厨师做去吧,哪个的菜先好就先端出来。

场景说明:用户注册后,需要发注册邮件和注册短信。

🌴 传统的做法

(1)串行的方式

将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。

(2)并行方式

将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。

🔥 分析

假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。
因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100) 。

也就是说如果我们使用传统的方式来做这个案例,那么我们的性能(并发量,吞吐量,响应时间)会出现瓶颈

🌵 使用消息队列

我们引入消息队列,将不是必须的业务逻辑,进行异步处理。改造后的架构如下:

🔥 分析:

按照以上约定,用户的响应时间相当于是注册信息写入数据库的时间,也就是50毫秒。注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。因此架构改变后,系统的吞吐量提高到每秒20 QPS。比串行提高了3倍,比并行提高了两倍。

2.2 应用解耦

场景说明:用户下单后,订单系统需要通知库存系统。

🌴 传统做法

订单系统调用库存系统的接口。如下图:

缺点:假如库存系统无法访问,则订单减库存将失败,从而导致订单失败,订单系统与库存系统耦合 。

🌵 使用消息队列

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。

假如在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦

2.3 流量削锋

流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。


应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。


a、可以控制活动的人数
b、可以缓解短时间内高流量压垮应用

用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。

秒杀业务根据消息队列中的请求信息,再做后续处理 

2.4 日志处理

日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。架构简化如下:

日志采集客户端:负责日志数据采集,定时写受写入Kafka队列。
Kafka消息队列:负责日志数据的接收,存储和转发。
日志处理应用:订阅并消费kafka队列中的日志数据 。

2.5 消息通讯

消息通讯是指:消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。


🚀 点对点通讯:

客户端A和客户端B使用同一队列,进行消息通讯。

🚀 聊天室通讯:

客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。

以上实际是消息队列的两种消息模式,点对点或发布订阅模式

三、使用MQ的好处

(1)降低了两台服务器之间的耦合,哪怕是一台服务器挂了,另外一台服务器也不会报错或者休克,因为其监听的是MQ,只要服务器恢复再重新连上MQ发送消息,监听服务器就能再次接收。

(2)MQ作为一个仓库,本身就提供了非常强大的功能,例如不再是简单的一对一功能,还能一对多,多对一,类似补保险箱场景,只要有特定的密码,谁都能存,谁都能取。也就是说能实现群发消息和以此衍生的功能。 

(3)普遍化的持久化功能,当MQ挂掉可以存储在磁盘等下重启恢复。(需要设置)

四、介绍

RabbitMQ是采用Erlang语言实现了高级消息队列协议(AMQP)的开源消息代理软件,是一个消息代理 , 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息再传输过程中的安全。

五、为什么要选择RabbitMQ?

我们常见的消息中间件其实不单单只有RabbitMQ,还有ActiveMQKafka以及RocketMQ等。以下就是我们选中RabbitMQ的理由:

(1)RabbitMQ部署最广泛的开源消息代理。
(2)RabbitMQ拥有成千上万的用户,是最受欢迎的开源消息代理之一。从T-Mobile 到Runtastic。

(3)RabbitMQ在全球范围内的小型初创企业和大型企业中都得到使用。
(4)RabbitMQ轻巧,易于在内部和云中部署。它支持多种消息传递协议。RabbitMQ可以部署在(4)分布式和联合配置中,以满足大规模,高可用性的要求。
(5)RabbitMQ可在许多操作系统和云环境上运行,并为大多数流行语言提供了广泛的开发人员工具。


六、RabbitMQ 特点

(1)可靠性

RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。

(2)灵活的路由

在消息进入队列之前,通过 Exchange 来分发路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。

(3)消息集群

多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。

(4)高可用

队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用

(5)多种协议

RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。

(6)多语言客户端

RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。

(7)管理界面

RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。

(8)跟踪机制

如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。

(9)插件机制

RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。


 

七、RabbitMQ的基本概念

🚀 Producer消息的生产者,也是一个向交换器发布消息的客户端应用程序。

🚀 Consumer消息的消费者,表示一个从一个消息队列中取得消息的客户端应用程序。

🚀 Broker接受客户端的链接,实现AMQP实体的服务。

🚀 Connection生产者、消费者与broker之间的TCP链接。

🚀 Channel如果每一次访问RabbitMQ都建立一个connection,在有消息量大的时候建立大量的TCP链接的开销太大,效率也低。channel是在connection内部建立的逻辑链接,channel之间完全隔离,这样就减少了系统频繁创建TCP链接的开销。

🚀 Exchangemessage到达broker的第一站,根据分发规则,匹配routing key,将消息分发到queue中去。常用的类型有direct(点对点)、topic(规则匹配)、fanout(广播)。

🚀 Queue消息最终被送到这里等待consumer。

🚀 Bindingexchange和queue之间的虚拟链接,binding中包含routing key,binding信息保存到exchange的查询表中,用于message的分发。

🚀 Virtual host出于多租户和安全因素,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost中创建exchange、queue等。


小结

以上就是【一心同学】整理的【消息队列MQ】以及其【RabbitMQ】的讲解了,看完【一心同学】的陈述,是不是对【RabbitMQ】不再陌生了,在接下来我博客里,我将会继续讲解【RabbitMQ的更多操作】。

如果这篇【文章】有帮助到你,希望可以给【一心同学】点个👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【后端技术】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【一心同学】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发