mq简介

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

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

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、receive

等。JMS已经成为 Java Enterprise Edition 的一部分。从使用角度看,JMS和JDBC担任差不多的角色,用户都是根据相应的接口可以和实现了 JMS 的服务进行通信,进行相关的操作。

JMS角色概念:

  • 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 。

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

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

点击关注我的博客

MQ系列(0)——MQ简介的更多相关文章

  1. 【 D3.js 入门系列 --- 0 】 简介和安装

    D3的全称是(Data-Driven Documents),顾名思义可以知道是一个关于数据驱动的文档的javascript类库.如果你不知道什么是javascript,请先学习javascript的相 ...

  2. 【 D3.js 入门系列 --- 0 】 简介及安装

    家是我的个人博客: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/.转载请注明出处,谢谢. D3的全称是(Data-D ...

  3. 《吃透MQ系列》之扒开Kafka的神秘面纱

    大家好,这是<吃透 MQ 系列>的第二弹,有些珊珊来迟,后台被好几个读者催更了,实属抱歉! 这篇文章拖更了好几周,起初的想法是:围绕每一个具体的消息中间件,不仅要写透,而且要控制好篇幅,写 ...

  4. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

  5. 【SpringBoot MQ 系列】RabbitListener 消费基本使用姿势介绍

    [MQ 系列]RabbitListener 消费基本使用姿势介绍 之前介绍了 rabbitmq 的消息发送姿势,既然有发送,当然就得有消费者,在 SpringBoot 环境下,消费可以说比较简单了,借 ...

  6. 《吃透MQ系列》核心基础全在这里了

    这是<吃透XXX>技术系列的开篇,这个系列的思路是:先找到每个技术栈最本质的东西,然后以此为出发点,逐渐延伸出其他核心知识.所以,整个系列侧重于思考力的训练,不仅仅是讲清楚 What,而是 ...

  7. MQ系列3:RocketMQ 架构分析

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 1 背景 我们前面两篇对主流消息队列的基本构成和技术选型做了详细的分析.从本篇开始,我们会专注当下主流MQ之一的RocketMQ. 从 ...

  8. MQ系列4:NameServer 原理解析

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 1 关于NameServer 上一节的 MQ系列3:RocketMQ 架构分析,我们大致介绍了 ...

  9. MQ系列5:RocketMQ消息的发送模式

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 在之前的篇章中,我们学习了RocketMQ的原理, ...

随机推荐

  1. 201771010128王玉兰《面向对象程序设计(Java)》第十二周学习总结

    第一部分:理论知识 1.AWT与Swing简介 (1)Swing用户界面库是非基于对等体的GUI工具箱. Swing具有更丰富并且更方便的用户界面元素集合. Swing对底层平台的依赖很少,因此与 ...

  2. BZOJ1009 矩阵快速幂+DP+KMP

    Problem 1009. -- [HNOI2008]GT考试 1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: ...

  3. UVA10529 Dumb Bones (完成度:40%)

    题目链接:https://vjudge.net/problem/UVA-10529 知识点: 概率与期望,DP. 题目大意: 现要放置 \(n\) 个多米诺骨牌,且每放置一块多米诺骨牌有 \(P_l\ ...

  4. 验证for循环打印数字1-9999所需要使用的时间(毫秒)

    package com.yhqtv.demo01.FunctionalInterface; /* * @author XMKJ yhqtv.com Email:yhqtv@qq.com * @crea ...

  5. Write a merge sort program

    Merge Sort- Recursion Write a merge sort program in JavaScript. Sample array : [34, 7, 23, 32, 5, 62 ...

  6. Oracle 中同义词使用

    一.数据库对象: 模式对象: 数据库对象是逻辑结构的集合,最基本的数据库对象是表; 其他对象包括:create增.drop删.改alter 同义词.序列.视图.索引 1.同义词: ①. 现有对象的一个 ...

  7. 【Mac+Wind7】pytest + allure生成定制报告

    一.升级Powershell(windows7及以上版本默认自带.其实普通的CMD命令行工具够用了) 我是Win7默认带的pw1.0,太古老了升级一下,地址如下,选择与自己windows版本匹配的连接 ...

  8. C++软件开发面试题总结

    面试题有难有易,不能因为容易,我们就轻视,更不能因为难,我们就放弃.我们面对高薪就业的态度永远不变,那就是坚持.坚持.再坚持.出现问题,找原因:遇到困难,想办法.我们一直坚信只有在坚持中才能看到希望, ...

  9. NodeJS——在Sublime中配置NodeJS执行环境

    这种方式比在DOS窗中直接执行更加高效!!! nodejs 1.运行Sublime,菜单上找到Tools ---> Build System ---> new Build System 2 ...

  10. windows下nodejs的安装

    1.下载 从nodejs官网下载地址:http://www.nodejs.org 2.安装 双击node-v4.4.0-x64.msi或者其他版本 3.环境搭建 进入cmd命令窗口 进入到nodejs ...