MQ系列(0)——MQ简介

mq简介

mq 就是消息队列(Message Queue)。想必你们对队列的数据结构已经很熟悉了,消息队列能够简单理解为:把要传输的数据放在队列中,mq 就是存放和发送消息的这么一个队列中间件。在消息队列中,把数据放到消息队列的角色叫作 生产者,从消息队列中消费获取数据的叫作 消费者java

那么消息队列有哪些使用场景呢? 六字真言:异步削峰解耦。golang

MQ的异步

异步概念想必你们都熟悉了,就是 a应用(或程序) 将数据传递给b应用(或程序)后,不等待b的响应结果直接作下一步动做,而b并行执行,提升效率。使用mq,就能完美支持异步:a将数据发送到mq,而后本身该干吗干吗,b监听mq的消息,来了消息就消费它。这样就作到程序或者应用间的异步。网络

mq的削峰

首先咱们要知道什么是削峰:削峰的全称应该叫削峰填谷。削峰就是当应用或者程序的请求量过大的时候,将一部分请求延时处理,放到请求量不大时间段去处理它。mq削峰填谷的原理也很简单,mq在应用程序中至关于一个 “蓄水池” 的做用——当 “水流量(请求)” 过大的时候,“蓄水池(mq)” 将 "水" 先存起来。当有能力去消费这些水的时候再去从 “蓄水池” 放水。实际的过程是——请求数据先发到 mq ,应用程序监听mq 并消费消息。当请求量大于消费量的时候,请求积压在mq中存储;当消费量大于请求量的时候,请求就会慢慢被处理完。这听上去就像小学作的游泳池放水排水的数学题。数据结构

mq的解耦

mq解耦性是显而易见的,应用程序直接不直接互相耦合,甚至能够不用知道对方的存在。它想要发出什么样的请求,或者拿什么数据,都是去找mq。mq就像个搬运工同样在这些应用之间搬运数据。异步

mq 协议及产品

mq 协议有两种,jmsAMQP 。一般而言提到JMS(Java MessageService)其实是指 JMS APIJMS 是由Sun公司早期提出的消息标准,旨在为java应用提供统一的消息操做,包括create、send、receiveide

等。JMS已经成为 Java Enterprise Edition 的一部分。从使用角度看,JMS和JDBC担任差很少的角色,用户都是根据相应的接口能够和实现了 JMS 的服务进行通讯,进行相关的操做。学习

JMS角色概念:ui

  • JMS provider:实现了JMS接口的消息中间件,如ActiveMQ
  • JMS client:生产或者消费消息的应用
  • JMS producer/publisher:JMS消息生产者
  • JMS consumer/subscriber :JMS消息消费者
  • JMS message:消息,在各个JMS client传输的对象;
  • JMS queue:Provider存放等待被消费的消息的地方
  • JMS topic:一种提供多个订阅者消费消息的一种机制;在MQ中经常被提到,topic模式。

    AMQP(advanced message queuing protocol) 在2003年时被提出,最先用于解决金融领不一样平台之间的消息传递交互问题。AMQP是一种 binary wire-level protocol(连接协议)。AMQP 不从 API 的层面层对使用规范进行限定,而是直接定义网络交换的数据格式。这意味着实现了amqp协议的消息队列中间件支持跨平台。咱们可使用 Java 的 AMQP providerconsumer 能够是golang 。code

在AMQP中,消息路由(messagerouting)和JMS存在一些差异,在AMQP中增长了 Exchangebinding 的角色。producer 将消息发送给 Exchangebinding 决定 Exchange 的消息应该发送到那个 queue,而consumer直接从queue中消费消息。queue和exchange的bind有consumer来决定。中间件

相对而言,AMQP的消息队列使用的更为普遍。如 rabbitMQ , kafka , rocketMQ 等都是实现AMQP协议的消息队列。接下来咱们将会学习 rabbitMQkafka 的相关知识。

点击关注个人博客

相关文章
相关标签/搜索