RabbitMQ-介绍

为什么要使用 RabbitMQ?他解决了什么问题?

解决的问题就是同步变异步的问题
如下图在进行用户在进行订单请求的时候,请求交给了的订单的服务,服务要进行处理,同时调用,短信服务,邮箱服务,App服务等,此时出现的问题就是,用户要的等待所有的服务结束才能的到反馈的信息,这样的服务是很不友好的,而且所有的服务都是同步,在一个的线程中影响效率,并且服务和服务之间耦合度太大。

在这里插入图片描述

解决方式一)

我们可以在订单服务处理后加一个的线程池,每当的用户请求就开启线程去处理短信服务,邮箱服务,App服务这样也能实现的同步变成异步,但是线程池需要自己实现,并且服务和服务之间的耦合度依然很大。

在这里插入图片描述

解决方式二)

使用消息中间件解决同步变异步和服务之间的解耦,用户发送请求到订单服务,由订单服务触发MQ系统,由MQ系统通知其他服务即可,订单服务直接将信息反馈给用户即可,而无需等待。

在这里插入图片描述

消息中间件还有个重要的作用就是流量削峰

比如电商的秒杀活动本身是一种商业推广行为,肯定是希望有更多的人参与进来的。无效的请求越多,也就表示这商业推广越成功。只是在秒杀开始的时候,这些大量的秒杀请求就会给承载秒杀的服务器带来沉重的负担,因此我们可以设计一些规则,让并发的请求延缓或过滤掉这些无效请求,以此来削弱流量高峰对服务器的压力,这就是流量削峰

我们可以使用消息中间件保护下游系统的安全,保证在高并发情况下下游系统不被高量访问压垮,但是这也有点丢车保帅的意思,但是也不是没有解决方案针对秒杀这一场景,削峰从本质上来说就是更多地去延缓用户发出的请求,以便减少和过滤掉一些无效的请求,它遵从【请求数要尽量少】的原则。
流量削峰主要有三种操作思路,一是排队,二是答题,三是分层过滤,这三种方式都是无损(即不会损失用户的请求发出)的实现方案。当然,还有些有损的实现方案,包括后面要介绍的关于稳定性的一些方法,比如限流和机器负载保护等一些强制措施也能达到削峰保护的目的,只是这些都是一些不得已的措施。

在这里插入图片描述

二)消息队列中的角色

Provider 消息生产者,就是投递消息的程序。也就是请求的发送方
Consumer 消息消费者,就是接受消息的程序。请求的处理方

没有使用消息队列时消息传递方式

在这里插入图片描述

使用消息队列后消息传递方式

在这里插入图片描述

什么是队列?

队列就像存放了商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站。

队列里存储了什么?

在 rabbitMQ 中,信息流从你的应用程序出发,来到 Rabbitmq 的队列,所有信息可以只 存储在一个队列中。队列可以存储很多信息,因为它基本上是一个无限制的缓冲区,前提是 你的机器有足够的存储空间。也就是说Rabbitmq的队列能存储多少的请求信息完全取决于你的内存的大小

队列和应用程序的关系?
多个生产者可以将消息发送到同一个队列中,多个消息者也可以只从同一个队列接收数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值