【退役之重学Java】如何开发一个消息队列中间件

一、考虑可扩展性

分析

  1. 消息队列中的消息数量是不确定的,有时一两万个,出现流量高峰甚至消息积压的时候,就会有上百万、千万的消息在队列中。
  2. 所以,为了增加系统的稳定性,消息队列需要具备快速扩容的能力

实现

  1. 采用分布式系统设计,将消息队列的每一个topic 进行分区,每一个分区放一个机器
  2. 需要扩容,就增加分区的数量,进行数据迁移,这样就可以进行快速扩容了

二、考虑持久化

分析

  1. 要保证机器重启或宕机时,消息队列的数据不丢失,就需要实现持久化

实现

  1. 消息队列的持久化可以通过两个组件实现:队列索引(queue index)和消息存储(message store)。队列索引负责维护消息在队列中的位置以及消息是否已被传递和确认。每个队列都有一个队列索引。消息存储是用于存储消息的键值存储,在每个虚拟主机(vhost)中的所有队列之间共享。消息可以直接存储在队列索引中,也可以写入消息存储。
相关推荐
暴走十八步2 分钟前
PHP+vscode开启调试debug
开发语言·vscode·php
梵得儿SHI4 分钟前
(第十篇)Spring AI 核心技术攻坚全梳理:企业级能力矩阵 + 四大技术栈攻坚 + 性能优化 Checklist + 实战项目预告
java·人工智能·spring·rag·企业级ai应用·springai技术体系·多模态和安全防护
一路向北⁢5 分钟前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(三)
java·spring boot·后端·sse
郝学胜-神的一滴6 分钟前
Python 列表 vs 数组:深入解析与最佳选择指南
开发语言·python·程序人生
杜子不疼.6 分钟前
基于ATVC模板库的Ascend C Vector算子快速开发指南
c语言·开发语言·mfc
MSTcheng.8 分钟前
【C++】C++11新特性(三)
开发语言·c++·c++11
learning-striving9 分钟前
kali连不上网解决方法
linux·开发语言·网络·php·kali
田野追逐星光16 分钟前
STL容器list的模拟实现
开发语言·c++·list
摇滚侠29 分钟前
macbook shell 客户端推荐 Electerm macbook 版本下载链接
java·开发语言
程序员布吉岛31 分钟前
Java 后端定时任务怎么选:@Scheduled、Quartz 还是 XXL-Job?(对比 + 避坑 + 选型)
java·开发语言