MQ是一个消息中间件,是为了解决发送者和接收者处理速度不匹配的问题而产生的,有队列和主题两种。

队列:一对一。

主题:一对多。例如有100人订阅了我的公众号,当我在公众号上发布新的文章时100人都能收到推送消息。

MQ的主要作用:

  1.异步:在使用MQ后发送者和接收者之间无需等待,发送者只需要讲消息发送给MQ即可无需关心接收者何时接受,如何处理。

  2.解耦:可以解决应用或者模块之间的耦合问题。

  3.削峰:抵御流量洪峰。在一个业务中突然有大量的请求发送来的时候可以保护主业务的正常运转。例如:秒杀业务就可以使用MQ,系统接收到的请求只需要放置在MQ中即可。用户虽然只是点击了一个下单按钮但后台实际业务会有很多操作:检查库存、锁定库存、检查余额、锁定余额等等....当过多的业务请求堆积在一起时MQ就可以起到削峰的作用从而保护主业务了。

2021.02.23

队列总结:

  两种方式:

  1.同步阻塞方式(receive):接收者使用receive的方式来接收数据,receive可以设置时间。

  2.异步非阻塞方式(onMessage):使用监听器进行接收数据,当消息到达后系统会自动调用监听器来处理。

队列特点:

  1.每个消息都只有一个消费者,他们是一对一的。

  2.消息的生产者和消费者质检时异步的,他们在时间上没有相关性。

  3.生产者在生产消息时队列会保存消息。消息被消费后不会再存在,消费者不可能拿到被消费掉的消息。

队列消费情况:

  在同一个生产者的情况下:

  1.存在一个消费者:所有消息都会被当前消费者消费。

  2.先启动一个消费者,再启动一个消费者:所有消息都会被第一个消费者消费掉。

  3.在消息生产前同时启动两个消费者:两个消费者会轮询对消息进行平分。

topic特点:

  1.在topic中一个生产者可以被多个消费者消费。

  2.消费者和生产者之间存在时间上的关系,消费者只能收到订阅某个topic之后的消息,订阅之前的消息是无法接收的。

  3.生产者生产时,topic不保存消息,应该先启动消费者在启动生产者。

2021.02.24

什么是JMS?

是指两个应用之间进行消息的创建、发送、接收读取,是一套异步通信的API标准体系和规范。使用JMS进行通信时两个应用之间不是直接相连接的而是通过MQ来实现的从而达到削峰、解耦、异步的效果。

JMS中有消息的生产者、消息的消费者、MQ(实现JMS规范的消息中间件)、消息内容(消息头、消息体、消息属性)

JMS消息头中的属性:

  JMSDestination:消息目的地(发送到哪里)

  JMSDeliveryMode:消息持久化模式(是否开启持久化操作)

  JMSExpiration:消息过期时间

  JMSPriority:消息的优先级(0-4为普通消息,以上为加急消息。加急消息优先于普通消息)

  JMSMessageID:消息的唯一标识符

JMS消息体常用的有:

  TextMessage:一个普通的字符串消息,就是String

  MapMessage:一个MAP类型的消息,kv结构。k为String类型,v为java中的基本类型

JMS中的消息属性:

  是对JMS消息体的一种扩展信息,可以用于标识、去重等使用。

什么是消息持久化?

  消息持久化是指生产者将消息发送至MQ之后,不论出现什么问题,例如:如果出现宕机之类的情况,MQ都会保证消费者可以接收到消息。

queue的消息持久化和消息的非持久化:

  消息发送至MQ如果宕机了消息也没了就是非持久化。如果宕机了消息还有直到被消费者消费之后才会消失则是持久化。

topic的消息持久化和消息非持久化:

  topic是默认非持久化的。因为消息的生产者在生产消息时消费者必须在线才可以接收到消息。

  topic的持久化,只要消费者订阅过MQ那么在生产者生产消息后消费者就可以接收到消息,无论消费者在线与否、服务器宕机与否。就像订阅微信公众号一样,只要订阅了就可以收到生产者生产的消息。

建议使用auto+nio的协议和IO模型类型(此处需要修改配置),nio是一种非阻塞的IO模型相比原先阻塞IO(BIO)性能要好很多,auto像适配器一样会根据url中指定的传输协议自己去匹配,web开发建议还是使用tcp。

MQ的学习记录~的更多相关文章

  1. java后端学习记录2019

    学习计划 2019年计划 1.学习计算机基础,并加以实践.包括LeetCode刷题.数据库原理(索引和锁.Sql优化等).网络协议(Http.Tcp).操作系统(加深Linux).<Http权威 ...

  2. Java设计模式学习记录-观察者模式

    前言 观察者模式也是对象行为模式的一种,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式. 咱们目前用的最多的就是各种MQ(Message Queue ...

  3. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  4. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  5. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  6. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  7. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  8. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  9. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

  10. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

随机推荐

  1. Vulnhub-Node

    利用信息收集拿到路径得到账户密码,下载备份文件,base64解密后,利用fcrackzip爆破zip压缩包,得到一个文件,查看app.js,发现泄露的账户密码,连接ssh,成功连接,利用ubuntu历 ...

  2. Qt QHeaderView 添加复选框

    QT QTableView 表头添加复选框 最近在做表格,用QTableView,然后有一个需求是给表格添加表头,但是没有一个API能够在表头添加复选框,基本都是来重载QHeaderView,有两种方 ...

  3. CSAPP学习笔记——chapter4 处理器体系结构

    CSAPP学习笔记--chapter4 处理器体系结构 这一章相对于其它的章节,是相对来说比较困难的一章:其它章节的一些内容都在计组,计网,操作系统等课程里面已经接触过一些概念,但是有关处理器,我才发 ...

  4. 小白必看的cmd简单代码!(图片看不到的可复制 粘贴到Typroa进行观看)

    打卡cmd的方法 直接window加r 输入cmd 在下方菜单 找到window标志,打开 输入命令提示符 更高级的cmd权限使用:右键命令提示符,点击"以管理员身份运行" 一些简 ...

  5. 学习Linux命令的正确姿势

    大家好,我是良许. 大家应该注意到了,最近我的公众号文章末尾都挂着自己录制的<Linux命令从小白到大神>课程. 这个课程我从开始录制到制作完成,足足花了一个半月.如果加上前期的资料收集与 ...

  6. 基于Lighthouse搭建高颜值的YesPlayMusic网易云播放器

    本文介绍了如何使用腾讯云的Lighthouse轻量应用服务器来搭建一个高颜值的第三方网易云播放器. 项目简介 本文使用的是YesPlayMusic项目,这是一款高颜值的第三方网易云播放器,它完全可以作 ...

  7. Text Bg ContentSizeFitter的另类控制

    using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; [RequireComponent(typeof(Co ...

  8. 🎀gh-ost工具介绍及使用

    简介 gh-ost 是一款由GitHub开发的在线DDL(Online Data Definition Language)变更工具,专门用于MySQL数据库.它允许在不锁定表的情况下执行数据库模式变更 ...

  9. 理解tomcat中的BIO、NIO、AIO、ARP

    理解tomcat中的BIO.NIO.AIO.ARP tomcat作为springboot中默认的web容器,了解tomcat的运转可以帮助我们更好的去调整tomcat的参数达到更好的性能 前置知识 I ...

  10. Python爬取任意城市肯德基门店信息(json数据反序列化、提取数据、写入CSV)

    本案关键内容点:json数据反序列化.提取数据.写入CSV 创建csv,写入表头数据,脚本同目录下会创建名称为book的csv文件,且第一行插入表头内容 import csv f = open('bo ...