RabbitMQ

处理问题

服务异步调用

两个服务调用时,我们可以通过传统的HTTP方式,让服务A直接去调用服务B的接口,但是这种方式是同步的方式,虽然可以采用SpringBoot提供的@Async注解实现异步调用,但是这种方式无法确保请求一定回访问到服务B的接口

如何保证服务A的请求信息一定能送达到服务B完成一些业务操作呢

在这里插入图片描述

削峰

海量请求:在我们在做一些秒杀业务时,可能会在某个时间点突然出现大量的并发请求,这可能已经远远超过服务器的并发瓶颈,这时我们需要做一些削峰的操作,也就是将大量的请求缓冲到一个队列中,然后慢慢的消费掉。
如何提供一个可以存储千万级别请求的队列呢?

在这里插入图片描述

服务解耦

在微服务架构下,可能一个业务会出现同时调用多个其他服务的场景,而且这些服务之间一般会用到Feign的方式进行轻量级的通讯,如果存在一个业务,用户创建订单成功后,还需要去给用户添加积分、通知商家、通知物流系统、扣减商品库存,而在执行这个操作时,如果任意一个服务出现了问题,都会导致整体的下单业务失败,并且会导致给用户反馈的时间延长。这时就造成了服务之间存在一个较高的耦合性的问题。
如何可以降低服务之间的耦合性呢?

在这里插入图片描述

处理问题

RabbitMQ就可以解决上述的全部问题

异步调用

服务之间如何想实现可靠的异步调用 可以通过RabbitMQ的方式实现 服务A只需要保证可以把消息发送到RabbitMQ的队列中 服务B就一定会消费到队列中的消息只不过会存在一定的延时。

在这里插入图片描述

削峰

忽然的海量请求可以存储在RabbitMQ的队列中 然后由消费者慢慢消费 RabbitMQ的队列本身就可以存储上千万条消息

在这里插入图片描述

服务解耦

调用其他服务时 如果允许延迟效果的出现 可以将消息发送到RabbitMQ中 再由消费者慢慢消费

在这里插入图片描述

介绍

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)
RabbitMQ服务器是用Erlang语言编写的 而集群和故障转移是构建在开放电信平台框架上的
所有主要的编程语言均有与代理接口通讯的客户端库。
AMQP协议:
在这里插入图片描述

首先RabbitMQ基于AMQP协议开发,所以很多基于AMQP协议的功能RabbitMQ都是支持的,比如SpringCloud中的消息总线bus

其次RabbitMQ是基于Erlang编写,这是也是RabbitMQ天生的优势,Erlang被称为面向并发编程的语言,并发能力极强,在众多的MQ中,RabbitMQ的延迟特别低,在微秒级别,所以一般的业务处理RabbitMQ比Kafka和RocketMQ更有优势。

最后RabbitMQ提供自带了图形化界面,操作方便,还自带了多种集群模式,可以保证RabbitMQ的高可用,并且SpringBoot默认就整合RabbitMQ,使用简单方便。

架构在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值