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

一、考虑可扩展性

分析

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

实现

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

二、考虑持久化

分析

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

实现

  1. 消息队列的持久化可以通过两个组件实现:队列索引(queue index)和消息存储(message store)。队列索引负责维护消息在队列中的位置以及消息是否已被传递和确认。每个队列都有一个队列索引。消息存储是用于存储消息的键值存储,在每个虚拟主机(vhost)中的所有队列之间共享。消息可以直接存储在队列索引中,也可以写入消息存储。
相关推荐
yyy(十一月限定版)几秒前
C语言——堆
c语言·开发语言·算法
澜莲花1 分钟前
python图色之opencv基础
开发语言·图像处理·python·opencv
喜欢吃燃面2 分钟前
算法竞赛中的数据结构:图
开发语言·数据结构·c++·学习·算法
黎雁·泠崖2 分钟前
C 语言动态内存管理入门:malloc/calloc/realloc/free 核心函数详解
c语言·开发语言
哈市雪花4 分钟前
记录一次cmake无法正确使用vcpkg的问题
开发语言·c++
Yue丶越4 分钟前
【C语言】文件操作
服务器·c语言·开发语言
七夜zippoe6 分钟前
Spring MVC请求处理流程源码分析与DispatcherServlet核心逻辑
java·spring·mvc·过滤器·拦截器
笙枫8 分钟前
Agent 进阶设计:状态管理、中间件与多Agent协作
java·服务器·python·ai·中间件
Trouvaille ~10 分钟前
【C++篇】C++11新特性详解(三):高级特性与实用工具
开发语言·c++·stl·lambda·完美转发·包装器·可变参数模版
有趣灵魂12 分钟前
Java-根据HTTP链接读取文件转换为base64
java·开发语言·http