概念

MQ:消息队列(消息中间件),开源的基于AMQP协议的消息中间件,异步 解耦 削峰

核心作用:1.异步 2.解耦 3.消息通信

RabbitMQ

消息的类型:1.点对点 2.Worker 3.发布/定义(交换器)

四种交换器:

■1.fanout直接转发

■2.direct路由关键字匹配,精确

■3.topic路由关键字匹配,支持模糊(*和#)

■4.header消息头

RabbitMQ保证消息的可靠性(消息丢失)

原因:

有一定的概率会出现消息丢失

比如:1.消息刚从发送者发送到服务器中,发送者宕机了,在发送的一瞬间,服务器网络异常

2.消费者刚从服务器获取数据,还没获取完,服务器宕机了,或者网络延迟了

3.任何一款的MQ都有可能遇到消息丢失的问题,特别是高并发下

发送端:

要考虑的问题:

1.保证消息发送成功

2.保证服务端接收成功

3.要采用应答模式 发送端和服务端的应答模式

4.需要考虑消息补偿机制

解决方案:

1.消息开启本地持久化 --- 实现消息的落库的处理

2.实现基于延迟的二次确认机制 --- 消息采用2次投递方案,第一次立即执行,第二次间隔执行 采用延迟的模式进行,第二次的投递是为了保证数据的校验。如果存在就不做处理,要是不存在就同步一次

3.RabbitMQ支持消息事务 --- 可以采用事务的模式来处理消息是否成功

消费端:

1.保证消息的获取并应答

结合RabbitMQ的消息应答模式 实现消息消费的应答

2.保证消息过重

每一个消息都有唯一ID,每当消费者获取到消息的时候,先检验此消息有没有被消费过,如果没有再继续进行操作。要是之前消费过,那么就不能再次处理!可以结合Redis

RabbitMQ保证消息幂等性(消息重复)

幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

消息重复

MQ有可能会出现一个消息发送多次,导致消息的重复性

可能出现的场景:1.网络抖动 2.网络闪断 3.端点异常 服务端或者发送端或者消费端

消息出现非幂等性,就会导致消息的重复

解决方案:

1.唯一ID+指纹码

唯一ID 可以使用:雪花算法等等 这种分布式唯一ID生成器

指纹码:就是一段密文,加密规则各不相同

常用:时间戳+随机码+唯一ID+业务ID 采用一定加密技术 进行密文生成

2.基于Redis的原子性实现

Redis的原子性,自增啥的都可以,关键Redis支持集群

为消息设置唯一id,生成唯一id可以用雪花算法,实现去重

RabbitMQ延时队列

延时队列:跟普通队列比起来,多了一个延时的作用

死信消息:就是一个消息的TTL(有效期)结束了,但是消息还未处理,这时这个消息就变为了死信消息

死信队列和延迟消息投递

死信消息的条件:1.拒绝 2.过期 3.队列满了

延迟队列:RabbitMQ没有延迟队列,但是我们可以通过死信消息实现延迟消息投递\

消息的优先级

默认为5,可以通过设置x-max-priority,

MQ集群:1.默认模式 数据存储在其中某一台机器上,在使用的时候,才会进行同步。

2.镜像模式

项目中的应用场景:1.解耦逻辑 2.数据同步(近乎实时)3.延迟队列

RabbitMQ零碎整理,总有一天在你工作中会用到的更多相关文章

  1. 自己整理的所有java知识点(不断迭代中)

    1. 自己整理的所有java知识点(不断迭代中) 画图工具注册 https://www.processon.com/i/599d35fae4b00d97d7f9bb17 1.1. Java整体知识架构 ...

  2. 【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。

    近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"?       解决方式:手 ...

  3. RabbitMQ学习整理

    1.什么是消息队列? 概念: 消息队列(Message Queue,简称MQ),本质是个队列,FIFO先入先出,只不过队列中存放的内容是一些Message. 2.为什么要用消息队列,应用场景? 不同系 ...

  4. js零碎整理

    本文格式: 大整合类标题 文章标题 作者:文章网址 USA:参考老外网址/老外网址 &&: 意思是内涵一个系列 javascript方面整理: 1. for in 循环的输出顺序问题 ...

  5. RabbitMQ 资料整理

    前言: 官方教程: https://www.rabbitmq.com/getstarted.html 应用场景(之马云赚钱): http://blog.csdn.net/whoamiyang/arti ...

  6. RabbitMq的整理 exchange、route、queue关系

    https://blog.csdn.net/samxx8/article/details/47417133

  7. ## jvm知识点零碎整理

    1.初始化VM options配置 idea安装目录\bin\idea.exe.vmoptions 和 idea64.exe.vmoptions可以看到初始配置: -Xms128m  (设置初始化堆内 ...

  8. 工作中积累整理-CSS样式表(一)

    [layout] clear:该属性的值指出了不允许有浮动对象的边. 默认值:none none: 允许两边都可以有浮动对象 both: 不允许有浮动对象 left: 不允许左边有浮动对象 right ...

  9. 工作中常用的JS函数整理分享(欢迎大家补充)

    今年在渣X工作整理的常用JS函数 今年来了渣X工作,我所在这个部门分工很奇怪,CSS竟然有专门的人在搞,开发PHP的人员需要处理JS,以至于有时候开发起来不是那么得心应手,感觉把JS和CSS拆开就像是 ...

  10. 【linux】工作中linux系统常用命令操作整理

    1.Linux如何查看端口 使用lsof(list open files)命令,lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000. 或者使用n ...

随机推荐

  1. [转帖] 原来awk真是神器啊

    https://www.cnblogs.com/codelogs/p/16060082.html 简介# 刚开始入门awk时,觉得awk很简单,像是一个玩具,根本无法应用到工作之中,但随着对awk的了 ...

  2. Oracle19c 单节点ASM 存储模式数据库实例搭建过程

    1. 建议使用OEL进行安装. 2. 可以优先在Oracle的yum上面下载必须的rpm包. 地址为: http://yum.oracle.com/repo/OracleLinux/OL7/lates ...

  3. js中for in和for of详细讲解

    for in的详细讲解, for in遍历数组的毛病 1.index索引为字符串型数字,不能直接进行几何运算. 2.遍历顺序有可能不是按照实际数组的内部顺序 3.使用for in会遍历数组[所有的可枚 ...

  4. vue和uni-app不同的类型绑定不同的类名

    vue不同的类型绑定不同的类名 第一种 <div v-for="(item, index) in list" :key="index" > < ...

  5. devDependencies和dependencies有何区别

    01==>devDependencies用于本地环境开发时候所需要的依赖包. 上线后就不在需要了: npm i webpack-cli -D --save-dev等价为-D 意思是安装到开发环境 ...

  6. word文档删除空白页

    记住两个快捷键 CTRL+Backspace Shift+Backspace 鼠标箭头放在空白的页面 按住键盘上的快捷键 就可以成功删除了不要天天看营销号设置什么磅值,全选删除啥的 效果如下

  7. 【五】AI Studio 项目详解【VisualDL工具、环境使用说明、脚本任务、图形化任务、(五)在线部署及预测】PARL

    相关文章 [一]-环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简介 [五]-Sarsa&Qlear ...

  8. Linux 配置Quota磁盘配额

    由于Linux是一个多用户管理的操作系统,而Linux默认情况下并不限制每个用户使用磁盘空间的大小,假如某个用户疏忽或者恶意占满磁盘空间,将导致系统磁盘无法写入甚至崩溃,为了保证系统磁盘的有足够的剩余 ...

  9. DBGRIDEH 排序 我自己大总结【含DBX,Dac控件】

    1.三个属性让DBGridEH可以点击表头自动排序 只要设置下面三个属性: ColumDefValues->Title->TitleButton设为TRUE  sortlocal   设为 ...

  10. HBase-hbase shell操作

    hbase shell操作 一.DDL操作 1.开启hbase shell hbase shell 2.查看hbase状态 Status 3.查看hbase版本 Version 4.创建命名空间 cr ...