RabbitMQ零碎整理,总有一天在你工作中会用到
概念
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零碎整理,总有一天在你工作中会用到的更多相关文章
- 自己整理的所有java知识点(不断迭代中)
1. 自己整理的所有java知识点(不断迭代中) 画图工具注册 https://www.processon.com/i/599d35fae4b00d97d7f9bb17 1.1. Java整体知识架构 ...
- 【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。
近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"? 解决方式:手 ...
- RabbitMQ学习整理
1.什么是消息队列? 概念: 消息队列(Message Queue,简称MQ),本质是个队列,FIFO先入先出,只不过队列中存放的内容是一些Message. 2.为什么要用消息队列,应用场景? 不同系 ...
- js零碎整理
本文格式: 大整合类标题 文章标题 作者:文章网址 USA:参考老外网址/老外网址 &&: 意思是内涵一个系列 javascript方面整理: 1. for in 循环的输出顺序问题 ...
- RabbitMQ 资料整理
前言: 官方教程: https://www.rabbitmq.com/getstarted.html 应用场景(之马云赚钱): http://blog.csdn.net/whoamiyang/arti ...
- RabbitMq的整理 exchange、route、queue关系
https://blog.csdn.net/samxx8/article/details/47417133
- ## jvm知识点零碎整理
1.初始化VM options配置 idea安装目录\bin\idea.exe.vmoptions 和 idea64.exe.vmoptions可以看到初始配置: -Xms128m (设置初始化堆内 ...
- 工作中积累整理-CSS样式表(一)
[layout] clear:该属性的值指出了不允许有浮动对象的边. 默认值:none none: 允许两边都可以有浮动对象 both: 不允许有浮动对象 left: 不允许左边有浮动对象 right ...
- 工作中常用的JS函数整理分享(欢迎大家补充)
今年在渣X工作整理的常用JS函数 今年来了渣X工作,我所在这个部门分工很奇怪,CSS竟然有专门的人在搞,开发PHP的人员需要处理JS,以至于有时候开发起来不是那么得心应手,感觉把JS和CSS拆开就像是 ...
- 【linux】工作中linux系统常用命令操作整理
1.Linux如何查看端口 使用lsof(list open files)命令,lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000. 或者使用n ...
随机推荐
- [转帖]开源软件项目中BSD、MIT许可证合规问题探析
https://www.allbrightlaw.com/CN/10475/3be2369275d19e9e.aspx [摘要]本文将探析BSD开源许可证(Berkeley Software Di ...
- 转载:ubuntu各个版本的发行时间和停止支持的时间,更新到最新版和代号。
版本:20.10 代号:Groovy Gorilla 发布时间:2020/10/22 版本:20.04 LTS 代号:Focal Fossa 发布时间:2020/4/23 版本:19.10 ...
- Jumper Server 堡垒机搭建过程
Jumper Server 堡垒机搭建过程 背景说明 公司组织考核, 要对一套系统进行安全设置.有一个项目是使用堡垒机进行登录 堡垒机有多种用途,可以实现日志审计和安全设置等. 买商业设备的话太困难了 ...
- Linux下PG数据库计划任务定期备份恢复的方法
注意事项 PG数据库需要注意的一点是需要安装OSSP-UUID的组件才能使用. 本次使用最除了冷备之外 最简单的 pg_dump和pg_restore的操作 的方式来进行处理 务必定期演练保证数据备份 ...
- 你也能成为“黑客”高手——趣谈Linux Shell编程语言
作者:京东零售 杜兴文 我们看过很多在电脑命令行敲一些命令并给观众展示很高科技的画面感的电影,比如<盗梦空间><操作系统革命><代码>等等, 再想想电影黑客帝国中的 ...
- Vue3中shallowReactive和shallowRef对数据进行非深度监听
1.Vue3 中 ref 和 reactive 都是深度监听 默认情况下, 无论是通过 ref 还是 reactive 都是深度监听. 深度监听存在的问题: 如果数据量比较大,非常消耗性能. 有些时候 ...
- 虚拟IP绑定公网IP访问
绑定公网 IP 我们目前的虚拟 IP,还不能通过公网的形式进行访问,我们首先,来使用内部的 IP 进行访问看看效果如下: curl 虚拟IP 如上图我访问了两次,第一次访问返回的是 2222 的 ng ...
- 英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构技术和性能对比带你解决疑惑
英伟达系列显卡大解析B100.H200.L40S.A100.A800.H100.H800.V100如何选择,含架构技术和性能对比带你解决疑惑 近期,AIGC领域呈现出一片繁荣景象,其背后离不开强大算力 ...
- 强化学习技巧五:numba提速python程序
numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言. numba使用情况 使用numpy ...
- Leetcode刷题第二天-贪心
655:非递减数列 链接:665. 非递减数列 - 力扣(LeetCode) 直接找最大最小值进行替换不行,[1,5,4,6,7,8,9]最大最小值所处位置可能是非递减数列 如果nums[i]> ...