java rabbitmq 如何清理队列消息_这篇:消息队列RabbitMQ 我肝了!

本文介绍了消息队列(MQ)的基本概念、使用原因,包括解耦、异步处理的优势。讨论了常用的MQ产品如ActiveMQ、Kafka、RocketMQ和RabbitMQ,重点讲述了RabbitMQ的AMQP协议、安装过程、Web管理界面和第一个Java程序。此外,还展示了如何在SpringBoot中集成和使用RabbitMQ。
摘要由CSDN通过智能技术生成

(点击上方Java大蜗牛,轻松关注)

52e9a988ddc8f0d67f4817951b2d9e40.png

一、什么是消息队列

MQ (Message Quene) : 翻译为 消息队列 ,通过典型的 ⽣产者 和 消费者 模型,⽣产者不断向消息队列中⽣产消息,消费者不断的从队列中获取消息。因为消息的⽣产和消费都是异步的,⽽且只关⼼消息的发送和接收,没有业务逻辑的侵⼊,轻松的实现系统间解耦。别名为 消息中间件 通过利⽤⾼效可靠的消息传递机制进⾏平台⽆关的数据交流,并基于数据通信来进⾏分布式系统的集成。

9a2f2df699a97232100c32278e09a40c.png

二、为什么要使用MQ

1.解耦

现在我有一个系统A,系统A可以产生一个userId,然后,现在有系统B和系统C都需要这个userId去做相关的操作,可以写成如下操作

aafd60264a7a98d6d922f16de7de7577.png

fd6da15c5fded755b9855602bf8a9622.png

如果有一天,系统B的负责人告诉系统A的负责人,现在系统B的SystemBNeed2do(String userId)这个接口不再使用了,让系统A别去调它了。那么就需要从代码的基础上去修改了。这样紧密的耦合关系会导致很多麻烦,如果使用消息中间件就不会出现以上问题。

af797d1a166778dabd8d6f7bff73e2c9.png

2.异步

我们再来看看下面这种情况:系统A还是直接调用系统B、C、D

99a8ef40cbdc7b335e296bccd38a032e.png

假设系统A运算出userId具体的值需要50ms,调用系统B的接口需要300ms,调用系统C的接口需要300ms,调用系统D的接口需要300ms。那么这次请求就需要50+300+300+300=950ms

并且我们得知,系统A做的是主要的业务,而系统B、C、D是非主要的业务。比如系统A处理的是订单下单,而系统B是订单下单成功了,那发送一条短信告诉具体的用户此订单已成功,而系统C和系统D也是处理一些小事而已。

那么此时,为了提高用户体验和吞吐量,其实可以异步地调用系统B、C、D的接口。所以,我们可以弄成是这样的:

309dc57bc41602dd8b0cd44d3cb39a45.png

系统A执行完了以后,将userId写到消息队列中,然后就直接返回了(至于其他的操作,则异步处理)。

  • 本来整个请求需要用950ms(同步)

  • 现在将调用其他系统接口异步化,只需要100ms(异步)

3、削峰/限流

假设现在我们每个月要搞一次大促,大促期间的并发可能会很高的,比如每秒3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值