美文网首页
消息队列

消息队列

作者: 鄙人不善奔跑0 | 来源:发表于2020-04-04 21:37 被阅读0次

一.什么是消息队列

两个客户端A、B,A给B直接发送数据,必须保证同步(比如B挂了或者A发送数据10Mbps,B接收数据5Mbps,丢数据)为了解决同步问题,使用消息队列作为A和B之间的一个缓存。A将数据发送给消息队列,B只要正常就去队列中拿数据,这样就可以异步处理数据发送与接收的问题。

消息队列分为点对点模式和发布订阅模式

点对点模式:(一对一,消费者主动拉取数据,消息收到后消息清除)

点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是队列将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。

优点:消费者主动拉取数据,拉取速度取决于消费者自身

缺点:必须有一个线程来实施监控消息队列中是否有数据

发布订阅模式:(一对多,数据生产后,推送给所有订阅者)

发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即使当前订阅者不可用,处于离线状态。优缺点和点对点模式正好对应,优点是基于推送,有消息才会推送给消费者,缺点是消息传输速度取决于推送速度,若速度大于消费者消费的速度,会造成消息积压。

二.为什么需要消息队列

1.异步

很好理解,以一个订单流程为例:

下单

下单过程很复杂,用户从付款以后要经过很多个步骤,如果你一路串行等着每个步骤都执行完再告诉用户你买好了,用户肯定是不干。其实完全不必要这么做,只需下单完成支付,就可以告诉用户购买成功了,其他的业务可以异步执行,因为用户只想最快的要一个结果,你优惠券、短信、积分,晚个几分钟其实都没太大所谓,况且也不会这么慢

异步

2.解耦

有人会说,我不异步,我起一个线程池,用多线程去跑这个业务。ok,可以,但是你想想,一个流程,每个任务都得对应一个接口,当需要新加一个流程,你就新写一个接口,然后再去改线程的任务,而且全部写在一起,出了问题很不容易排查,随便哪个任务出点问题就会影响全局(前几天刚搞了一个多线程bug,傻逼兮兮的全部try catch,出了问题都监控不到)

解耦

下单完成,就把这个消息发送给其他系统,让他们自己处理就ok,你只管自己的流程就好。消费者去消息队列中获取支付成功的消息,这样就把一个订单流程所有的业务都拆分成一个个相互独立的系统,不再依赖,靠消息对请求进行异步处理。

3.削峰

把请求放到消息队列,等到流量高峰,我就允许一定数量的请求被处理,可以进入队列,剩下的直接扔回去给个友好提示。

问题

消息队列的高可用、重复消费、消息丢失、消息顺序、分布式事务

相关文章

  • 消息队列:消息队列简介

    1. 什么是消息队列 消息队列(message queue),是一种应用程序的通信方法; 消息队列是 生产者-消费...

  • 消息中间件

    消息中间件,也可以叫做中央消息队列或者是消息队列(区别于本地消息队列,本地消息队列指的是 JVM 内实现的队列实现...

  • 消息队列对比

    引用: 常用消息队列对比消息队列及常见消息队列介绍 常用消息队列 1. RabbitMQ 用erlang语言开发的...

  • 消息队列应用-使用异步队列就解耦了吗

    消息队列作用一文介绍了为什么要使用消息队列。我们再来讨论下如何有效使用消息队列。 消息队列模式 目前主流消息队列主...

  • Kafka常见问题解决

    概要:我们使用消息队列,就需要知道为什么要用消息队列,什么场景需要用消息队列,使用消息队列能带来哪些好处和消息队列...

  • 进程间通信(下)

    消息队列 在UNP第二卷中详细介绍了两种消息队列:Posix消息队列和System V消息队列。这两种消息队列很相...

  • APUE读书笔记-15进程内部通信(6)

    7、消息队列 消息队列是存放在内核中的消息的链表,通过消息队列标识进行标记。我们把消息队列称为队列,把它的标识称为...

  • java消息机制

    1.什么是消息队列? 1.消息队列是一个队列,先进先出,你无法读取消息队列中间的消息,只能按照顺序,从消息队列的头...

  • springboot项目架构(4)activemq、rabbit

    消息队列实现 支持的消息队列 ActiveMq RabbitMq RocketMq Kafka 各个队列实现队列与...

  • 进程间通信(7)-IPC通信之消息队列

    一、消息队列 消息队列是一种链式队列。 Msqid_ds:维护消息队列的结构体,队列的第一个消息指针msg_fir...

网友评论

      本文标题:消息队列

      本文链接:https://www.haomeiwen.com/subject/agysphtx.html