[14章]MQ大牛成长课--从0到1手写分布式消息队列中间件

landmandw · · 151 次点击 · 开始浏览    置顶

资料地址1:https://pan.baidu.com/s/1HXoEBXRtGZzDFEgU4NQmJQ 提取码:19ws 资料地址2:https://pan.baidu.com/s/1nuNmSglAnkXCxP0PZZvkMw 提取码:wl2c 一、什么是RabbitMq MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。 二、MQ的主要功能 RabbitMQ的主要功能包括实现应用程序的异步和解耦,同时也能起到消息缓冲和消息分发的作用。它通过生产者-消费者模式,使得生产者无需关心消费者的存在,反之亦然,从而达到解耦的目的。在分布式的系统中,RabbitMQ也被用在很多其他的方面,比如分布式事务的支持、RPC的调用等。 三、 RabbitMQ原理 1.Message 消息。消息是不具名的,它由消息头消息体组成。消息体是不透明的,而消息头则由一系列可选属性组成,这些属性包括:routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出消息可能持久性存储)等。 2.Publisher 消息的生产者。也是一个向交换器发布消息的客户端应用程序。 3.Consumer 消息的消费者。表示一个从消息队列中取得消息的客户端应用程序 4.Exchange 交换器。用来接收生产者发送的消息并将这些消息路由给服务器中的队列。三种常用的交换器类型1. direct(发布与订阅 完全匹配)2. fanout(广播)3. topic(主题,规则匹配) 5.Binding 绑定。用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。 四、理解消息队列 消息 就是两台计算机间传送的数据单位;本质上就是一段数据,它能被一个或者多个应用程序所理解,是应用程序之间传递的信息载体。消息可以非常简单,例如只包含文本字符串;也可以更复杂地嵌入对象。 队列 是数据结构中概念。在队列中,数据先进先出,后进后出,犹如排队做核酸。 消息队列 MQ是把消息和队列结合起来,称之为消息队列(Message Queue)。把要传输的数据(消息)与队列进行绑定,用队列先进先出机制来实现消息传递。消息队列由 生产者 和 消费者 两部分构成;生产者主要负责产生消息并把消息放入队列中,再由消费者去处理。消费者可以到指定队列中获取消息,或者订阅相应的队列,最后由MQ服务端进行消息推送。 什么是订阅?订阅就是为消费者服务的,消费者提前订阅,当消息队列中有消息产出时,自动去获取消息进行消费。生活中有很多这种例子,比如购买腾讯、优酷等视频会员时就会有订阅模式,当你的会员到期时,会自动帮你完成续费。 五、MQ的优势和劣势 1、优势和作用 应用解耦 例如在我们非常熟悉电商系统平台中,用户下订单需要调用订单系统,订单系统需要调用库存系统、支付系统、物流系统等进行数据交互来完成整个下单业务,这种把整个业务都耦合在一起。很容易出现我们经常遇见的问题: ①、当中间某个环节库存系统或支付系统出现异常或故障,会造成整个订单系统崩溃无法完成订单业务; ②、当我们需求开发时,可能会新增一个其他系统的业务与当前的订单系统关联并进行数据交互,此时就必须修改订单系统的代码。如果系统壮大,业务越来越多,越来越复杂时,随之带来的维护成本也会成指数增加。 2、劣势 系统可用性降低: 系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。 系统复杂度提高: MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。 一致性问题 : A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败,则会造成数据处理的不一致 六、常见MQ产品 ActiveMQ:基于JMS RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好 RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会 Kafka:分布式消息系统,高吞吐量

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

151 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传