### Spring IOC如何管理Bean之间的依赖关系,怎么样避免循环依赖
### SpringBean创建过程中的设计模式?
### 用MQ采集消息的时候,有没有做消息重复消费处理?怎么做的?
> 生产者在向Kafka写数据时,每条消息会有一个offset,表示消息写入顺序的序号。当消费者消费后,**每隔一段时间会把自己已消费消息的offset通过Zookeeper提交给Kafka**,告知Kafka自己offset的位置。这样一来,如果消费者重启,则会从Kafka记录的offset之后的数据开始消费,从而避免重复消费。
#### 发生重复消费后,如何**保证消息消费时的幂等性**
1. 向数据库insert数据时,先**根据主键查询,若数据存在则不insert,改为update**
2. 向Redis中写数据可以用**set去重,天然保证幂等性**
3. 生产者发送每条消息时,增加一个全局唯一id(类似订单id),消费者消费到时,先**根据这个id去Redis中查询是否消费过该消息**。如果没有消费过,就处理,将id写入Redis;如果消费过了,那么就不处理,保证不重复处理相同消息。
4. 基于数据库的**唯一键约束**来保证不会插入重复的数据,当消费者企图插入重复数据到数据库时,会报错。
总结:
- Kafka采取类似**断点续传**的策略保证消息不被重复消费。具体是通过**每隔一段时间把已消费消息的offset通过Zookeeper提交给Kafka**实现的。
- 但是当消费者**处理完成但尚未提交offset**的时间段宕机或重启等意外情况发生时,还是可能出现消息被重复消费。
- 保证消息不被重复消费(保证消息消费时的幂等性)其实是保证数据库中数据的正确性。几种保证系统幂等性的思路:通过主键查询,若存在则update;Redis天然set去重;根据全局id查询,若已消费则不处理;唯一键约束保证不插入重复数据等。
### RocketMQ
1. commitLog是什么?
> commtLog的存储其实是分多层的,commitLog -> mappedFileQueue -> mappedFile,其中真正存储数据的是mappedFile。
2. 为什么commitlog每个文件大小是1G
> rocketMQ主要通过MappedByteBuffer对文件进行读写操作。MappedByteBuffer这种内存映射的方式有几个限制,其中之一是一次只能映射1.5~2G 的文件至用户态的虚拟内存,这也是为何RocketMQ默认设置单个CommitLog日志数据文件为1G的原因了
3. `nameServer`的作用是什么
> 主要功能是为整个MQ集群提供服务协调与治理,具体就是记录维护Topic、Broker的信息,及监控Broker的运行状态
>
> Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步
4. 与`zookeeper`的区别
> NameServer是没有leader和follower区别的,不进行数据同步,通过Broker轮训修改信息.
- 前端
- C1-Javascript
- H5图片分块和断点续传
- JavascriptPatterns[Stoyanstefanov]
- macotask和microtask
- 前端代码生成器
- 跨域
- 页面回到顶部滚动按钮实现
- C2-CSS
- 浏览器的一些单位
- 盒模型
- 移动端判断横竖屏
- C3-框架
- ReactNative
- 开发环境搭建(安卓篇)
- Vue
- vue+pdfjs使用
- vue+typescript使用实践
- vue+webpack3.x集成typescript
- Vue源码3
- vue源码分析1
- vue源码分析2
- vue笔记
- C4-工具
- git
- Gitlab-CICD
- mock规则
- vscode-settings
- webpack自定义命令,切换代理地址
- 正则表达式
- 深入浅出webpack
- C5-Node
- express
- express源码阅读
- nightmare使用指南
- 爬虫1.0
- C6-微信
- 微信
- C7-Canvas
- 基础API
- 前端随笔笔记
- 后端
- C1-Java
- shiro
- C2-Linux
- ffmpeg
- ITerm
- Linux
- MongoDB安装
- MySql安装
- Ngnix反向代理
- 常见错误
- 备忘
- mac
- 备忘-Work
- 备忘Link
- 服务器资源
- 教程
- Hexo个人博客搭建笔录
- 文档
- CSS编码规范
- 前端编码规范
- 随笔
- 整理
- 正则
- 链接收藏
- 面试
- CodeWars题库
- CodeWars题库(二)
- Java社招面试题
- Java面试
- Web面试
- 前端笔试题
- 笔试题