面试题答案
一键面试设计策略
- 消息标识:
- 为每个消息添加唯一标识,例如使用时间戳加上进程ID和消息序列号等组合生成。这样在接收端可以通过该标识判断消息是否重复。
- 发送策略:
- 有序发送:发送进程按照一定逻辑顺序(如业务处理顺序)将消息发送到消息队列。每个发送进程维护自己的发送序号,保证发送的消息有序。
- 确认机制:发送进程发送消息后,等待接收进程的确认信息。若在一定时间内未收到确认,则重新发送该消息。可以采用类似TCP的重传机制,每次重传等待时间加倍,直到达到最大重传次数。
- 接收策略:
- 接收缓存:接收进程创建一个本地缓存,用于暂存接收到的消息。当接收到消息后,先检查消息标识是否已在缓存中存在,若不存在则处理该消息,并将其标识加入缓存;若存在则丢弃,避免重复处理。
- 消息确认:接收进程成功处理消息后,向发送进程发送确认消息。确认消息也可包含接收的消息标识,以便发送进程确认。
- 队列管理:
- 消息持久化:使用支持消息持久化的消息队列系统,确保在进程崩溃或系统故障时消息不会丢失。即使队列服务重启,持久化的消息依然存在。
- 优先级设置:根据业务需求为消息设置优先级。例如,对于一些紧急业务消息,设置较高优先级,优先被接收进程处理。
消息流转机制
- 发送阶段:
- 发送进程生成带有唯一标识的消息,按照设定的逻辑顺序将消息发送到消息队列。
- 发送后,启动定时器等待接收进程的确认消息。
- 队列存储阶段:
- 消息队列接收并存储发送进程发来的消息。若开启消息持久化,消息会被保存到持久化存储介质(如磁盘)。
- 根据消息优先级,对消息进行排序,高优先级消息排在队列靠前位置。
- 接收阶段:
- 接收进程从消息队列获取消息,先将消息存入本地缓存。
- 检查消息标识,若未重复,则处理消息。处理完成后,向发送进程发送确认消息。
- 若在本地缓存中发现重复消息标识,则丢弃该消息。
- 确认阶段:
- 发送进程收到接收进程的确认消息后,停止定时器。若定时器超时未收到确认消息,则根据重传策略重新发送消息。