其他分享
首页 > 其他分享> > RabbitMQ概述

RabbitMQ概述

作者:互联网

为什么要使用MQ

  • 微服务架构后,链式调用是我们在写程序的时候都是基本的写法
  • 为了这完成这一个整体功能会把它拆分成多个函数(或子模块)
  • 比如模块 A 调用模块 B,模块 B 调用模块 C,模块 C 调用模块 D
  • 但是大型分布式应用中,系统间的 RPC 交互复杂,一个功能后面要调用上百个接口并非不可能
  • 从 单体 架构过渡到 分布式 微服务 架构中,这样的架构中会出现什么问题呢
  • 当然是有的, 根据上面的几个问题,在设计系统时,就可以明确的要达到以下的几个目标
    • 能够解耦
    • 能够削峰
    • 能够异步
  1. 要做到系统 解耦,当新的模块进来时,可以做到代码改动最小
  2. 设置流程的缓冲池,可以让后端系统按自身吞吐能力进行消费,不被冲垮
  3. 强弱的依赖梳理,能把非关键的调用链路的操作,异步化,并提升整体系统的吞吐能力

    什么是MQ

    • 面向 消息 的中间件(message-oriented middleware0)
    • MOM 能够很好的解决以上的问题
    • MQ 是指利用高效可靠的消息传递机制进行与平台无关的数据交流
    • 并基于 数据通信 来进行分布式系统的集成
    • 通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储,流量削峰,异步通信,数据同步等

      大致流程

        • 发送者把 消息 发送到消息服务器,消息服务器把消息存放在若干个队列或主题中,在合适的时候,消息服
          务器会把消息转发给接受者,也就是消费者
        • 在这个过程中,发送和接受是 异步 的,也就是发送无需等待,和发送者和接受者的生命周期也没有任何关系
        • 在发布 pub / 订阅 sub模式下,也可以完成 一对多 的通信,可以让一个消息有多个接受者
        • 微信订阅号就是这样的

       

       

      MQ的特点

      异步处理模式

      • 消息发送者可以发送一个消息不需要等待响应
      • 消息发送者把消息发送到一条虚拟的通道(主题或队列)上
      • 消息接收者则订阅或监听该通道
      • 一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出回应
      • 整个过程都是异步的
      • 举个例子:
      • 也就是说,一个系统和另一个系统之间进行通信的时候,假如系统 A 希望发送一个消息给系统B,让它去处理,但是系统 A 不关注系统 B 到底怎么处理或者有没有处理好,所以系统 A 把消息发送给 MQ,然后就不管这条消息的 死活 了,接着系统 B 从 MQ 里面消费这条消息处理即可
      • 至于怎么处理,是否处理完毕,什么时候处理,都是系统 B 的事,与系统 A 无关

         

         

        • 这样的一种通信方式,就是所谓的 异步 通信方式,对于系统 A 来说,只要把消息发给 MQ
        • 然后系统 B 就会异步的去进行处理了,系统 A不能 同步 的等待系统 B 处理完
        • 这样的好处是什么呢,当然是 解耦 啦

        应用系统的解耦

        • 发送者和接收者不必了解对方,只需要 确认消息
        • 发送者和接收者,可以不在同一时间在线

           

           

          Rabbit概述及注意点

          • RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)
          • RabbitMQ 服务器是用 Erlang 语言编写的,而集群和故障转移是构建在开放 电信 平台框架上的
          • 所有主要的编程语言均有与代理接口通讯的客户端库

          归纳一下

          • RabbitMQ 实现了 AMQP 协议来构建自己的消息队列
          • RabbitMQ 是 Erlang 语言写的,但是我们操作 RabbitMQ 的驱动是 Java 编写的

          ActiveMQ和RabbitMQ的区别

          • ActiveMQ 他实现的是 JMS 协议(Java 消息协议)
          • RabbitMQ 实现的是 AMQP 协议(高级消息队列协议)
          • ActiveMQ:是 Java 写的
          • RabbitMQ:是 Erlang 写的,吞吐更多,延时更低!
          • 当然:区别还有很多,你一学就知道了我就不在多说了,后面有时间我会更新好的

          RabbitMQ的特点

          • RabbitMQ 最初起源于 金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗
          • 具体特点如下:

          可靠性

          • 可靠性(Reliability)
          • RabbitMQ 使用一些机制来保证消息的可靠性,如持久化、传输确认、发布确认

          灵活的路由

          • 灵活的路由(Flexible Routing)
          • 在消息进入队列之前,通过 Exchange 来路由消息的
          • 对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现
          • 针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也能通过插件机制实现自己的 Exchange

          消息集群

          • 消息集群(Clustering)
          • 多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker

          高可用

          • 高可用(Highly Available Queues)
          • 队列可以在集群中的任意一台机器上进行存储,使得在部分节点出问题的情况下队列仍然可用

          多种协议

          • 多种协议(Multi-protocol)
          • RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等

          多语言客户端

          • 多语言客户端(Many Clients)
          • RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等

          管理界面

          • 管理界面(Management UI)
          • RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面

          跟踪机制

          • 跟踪机制(Tracing)
          • 如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么

          插件机制

          • 插件机制(Plugin System)
          • RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件

标签:异步,队列,系统,RabbitMQ,发送者,概述,消息
来源: https://www.cnblogs.com/zdd-bettter/p/16126985.html