消息队列

消息队列基础介绍

消息队列-Message Queue

队列 - Queue

一种数据结构,先进先出
Java中的队列:

  • 123

为什么要使用消息队列?

  1. 解耦
    现在我有一个系统A,系统A可以产生一个userId

    然后,现在有系统B和系统C都需要这个userId去做相关的操作

    又过了几天,系统D的负责人接了个需求,也需要用到系统A的userId

    又过了几天,系统E的负责人过来了,告诉系统A,需要userId。
    又过了几天,系统B的负责人过来了,告诉系统A,还是重新掉那个接口吧。
    又过了几天,系统F的负责人过来了,告诉系统A,需要userId。
    系统A的负责人,每天都被这给骚扰着,改来改去,改来改去
    系统A将userId写到消息队列中,系统C和系统D从消息队列中拿数据。这样有什么好处?

    系统A只负责把数据写到队列中,谁想要或不想要这个数据(消息),系统A一点都不关心。
    即便现在系统D不想要userId这个数据了,系统B又突然想要userId这个数据了,都跟系统A无关,系统A一点代码都不用改。
    系统D拿userId不再经过系统A,而是从消息队列里边拿。系统D即便挂了或者请求超时,都跟系统A无关,只跟消息队列有关。
    这样一来,系统A与系统B、C、D都解耦了

  2. 异步
    当使用带有消息队列的异步处理的时候,将信息写入消息队列之后就可以立马返回,无需进行后续的调用。
    响应时间大大缩减。

  3. 流量削锋
    流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。
    应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。
    将所有的请求写入到消息队列中,业务根据消息队列中的请求信息,再做后续处理
    作用:
    a、可以控制活动的人数。用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
    b、可以缓解短时间内高流量压垮应用

  4. 日志处理
    日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题

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

  5. 消息通讯
    消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯

------------- The End -------------