新手也能看懂,消息队列其实很简单

  • 时间:
  • 浏览:3
  • 来源:彩神欢乐生肖_神彩欢乐生肖官方

  亲戚亲戚朋友知道意味模块之间不趋于稳定直接调用,不出新增模块意味修改模块就对你你这个 模块影响较小,原先系统的可扩展性无疑更好你你这个 。

  亲戚亲戚朋友可不时需把消息队列比作是原先存放消息的容器,当亲戚亲戚朋友时需使用消息的前一天可不时需取出消息供另一方使用。消息队列是分布式系统中重要的组件,使用消息队列主后来 为了通过异步处置提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ,亲戚亲戚朋友上面会一一对比有有哪些消息队列。

  ​ AMQP,即Advanced Message Queuing Protocol,原先提供统一消息服务的应用层标准 高级消息队列协议(二进制应用层协议),是应用层协议的原先开放标准,为面向消息的上面件设计,兼容 JMS。基于此协议的客户端与消息上面件可传递消息,无须受客户端/上面件同产品,不同的开发语言等条件的限制。

备注: 无须认为消息队列不到利用发布-订阅模式工作,只不过在解耦你你这个 特定业务环境下是使用发布-订阅模式的。除了发布-订阅模式,还很重对点订阅模式(原先消息不到原先消费者),亲戚亲戚朋友比较常用的是发布-订阅模式。 另外,这你你这个 消息模型是 JMS 提供的,AMQP 协议还提供了 5 种消息模型。

该文已加入开源项目:JavaGuide(一份所含大部分Java多线程 员所时需掌握的核心知识的文档类项目,Star 数接近 16k)。地址:https://github.com/Snailclimb/JavaGuide.



  使用队列(Queue)作为消息通信载体;满足生产者与消费者模式,第一根消息不到被原先消费者使用,未被消费的消息在队列中保留直到被消费或超时。比如:亲戚亲戚朋友生产者发送60 条消息的话,原先消费者来消费一般清况 下原先消费者会按照消息发送的顺序其他人 消费一半(也就不出你原先我原先的消费。)

总结:

  意味用户请求数据写入消息队列前一天就立即返回给用户了,或者请求数据在后续的业务校验、写数据库等操作中意味失败。或者使用消息队列进行异步处置前一天,时需适当修改业务流程进行配合,比如用户在提交订单前一天,订单数据写入消息队列,不到立即返回用户订单提交成功,时需在消息队列的订单消费者多线程 真正处置完该订单前一天,甚至出库后,再通过电子邮件或短信通知用户订单成功,以免交易纠纷。这就类似于亲戚亲戚朋友平时手机订火车票和电影票。

  《大型网站技术架构》第四章和第七章均有提到消息队列对应用性能及扩展性的提升。

RabbitMQ 后来 基于 AMQP 协议实现的。

  JMS定义了你你这个 不同的消息正文格式,以及调用的消息类型,允许你发送并接收以你你这个 不同形式的数据,提供现有消息格式的你你这个 级别的兼容性。

  我实在 使用消息队列主要有两点好处:1.通过异步处置提高系统性能(削峰、减少响应所需时间);2.降低系统耦合性。意味在面试的前一天你被面试官问到你你这个 问题报告 的话,一般清况 不出你在你的简历上涉及到消息队列这方面的内容,你你这个 前一天推荐你结合你另一方的项目来回答。



  如上图,在不使用消息队列服务器的前一天,用户的请求数据直接写入数据库,在高并发的清况 下数据库压力剧增,使得响应效率调快。或者在使用消息队列前一天,用户的请求数据发送给消息队列前一天立即 返回,再由消息队列的消费者多线程 从消息队列中获取数据,异步写入数据库。意味消息队列服务器处置效率快于数据库(消息队列也比数据库有更好的伸缩性),或者响应效率得到大幅改善。

ActiveMQ 后来 基于 JMS 规范实现的。

  另外为了处置消息队列服务器宕机造成消息丢失,会将成功发送到消息队列的消息存储在消息生产者服务器上,等消息真正被消费者服务器处置后才删除消息。在消息队列服务器宕机后,生产者服务器会确定分布式消息队列服务器集群中的你你这个 服务器发布消息。

  通过以上分析亲戚亲戚朋友可不时需得出消息队列具有很好的削峰作用的功能——即通过异步处置,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。 举例:在电子商务你你这个 秒杀、促销活动中,合理使用消息队列可不时需有效抵御促销活动刚开始小量订单涌入对系统的冲击。如下图所示:

总结:

  亲戚亲戚朋友最常见的事件驱动架构类似于生产者消费者模式,在大型网站中通常用利用消息队列实现事件驱动行态。如下图所示:

  “RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,亲戚亲戚朋友常常听到消息队列你你这个 关键词。我也在我的多篇文章中提到了你你这个 概念。意味你是熟练使用消息队列的老手,又意味你是不懂消息队列的新手,不论你了不了解消息队列,本文都将带你学会英语消息队列的你你这个 基本理论。意味你是老手,你意味从本文学到你前一天不曾注意的你你这个 关于消息队列的重要概念,意味你是新手,相信本文将不出你打开消息队列大门的一板砖。

  JMS(JAVA Message Service,java消息服务)是java的消息服务,JMS的客户端之间可不时需通过JMS服务进行异步的消息传输。JMS(JAVA Message Service,Java消息服务)API是原先消息服务的标准意味说是规范,允许应用多线程 组件基于JavaEE平台创建、发送、接收和读撤消 息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。

本文内容思维导图:

  除了上面说的消息消费顺序的问题报告 ,使用消息队列,亲戚亲戚朋友时需考虑如可保证消息不被重复消费?如可保证消息的可靠性传输(如可处置消息丢失的问题报告 )?......等等问题报告 。后来说使用消息队列也全部就有十全十美的,使用它也会让系统可用性降低、复杂性度提高,另外时需亲戚亲戚朋友保障一致性等问题报告 。

参考:《Java工程师面试突击第1季-中华石杉老师》

①点到点(P2P)模型

  消息接受者对消息进行过滤、处置、包装后,构造成原先新的消息类型,将消息继续发送出去,等待你你这个 消息接受者订阅该消息。或者基于事件(消息对象)驱动的业务架构可不时需是一系列流程。

② 发布/订阅(Pub/Sub)模型

  另外,亲戚亲戚朋友知道队列 Queue 是你你这个 先进先出的数据行态,后来消费消息时也是按照顺序来消费的。比如生产者发送消息1,2,3...对于消费者就会按照1,2,3...的顺序来消费。或者偶尔也会跳出消息被消费的顺序不对的清况 ,比如某个消息消费失败又意味原先 queue 多个consumer 也会意味消息被消费的顺序不对,亲戚亲戚朋友一定要保证消息被消费的顺序正确。



  发布订阅模型(Pub/Sub) 使用主题(Topic)作为消息通信载体,类似于于广播模式;发布者发布第一根消息,该消息通过主题传递给所有的订阅者,在第一根消息广播前一天才订阅的用户则是收不到该条消息的

  消息队列使利用发布-订阅模式工作,消息发送者(生产者)发布消息,原先或多个消息接受者(消费者)订阅消息。 从上图可不时需就看消息发送者(生产者)和消息接受者(消费者)之间不出直接耦合,消息发送者将消息发送至分布式消息队列即刚开始对消息的处置,消息接受者从分布式消息队列获取该消息后进行后续处置,无须时需知道该消息从何而来。对新增业务,我希望对该类消息感兴趣,即可订阅该消息,对原有系统和业务不出任何影响,从而实现网站业务的可扩展性设计