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

一、考虑可扩展性

分析

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

实现

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

二、考虑持久化

分析

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

实现

  1. 消息队列的持久化可以通过两个组件实现:队列索引(queue index)和消息存储(message store)。队列索引负责维护消息在队列中的位置以及消息是否已被传递和确认。每个队列都有一个队列索引。消息存储是用于存储消息的键值存储,在每个虚拟主机(vhost)中的所有队列之间共享。消息可以直接存储在队列索引中,也可以写入消息存储。
相关推荐
木鹅.2 分钟前
聊天记忆
java
匠心网络科技2 分钟前
前端学习手册-JavaScript条件判断语句全解析(十八)
开发语言·前端·javascript·学习·ecmascript
神仙别闹2 分钟前
基于C++生成树思想的迷宫生成算法
开发语言·c++·算法
海上彼尚2 分钟前
Go之路 - 1.gomod指令
开发语言·后端·golang
我命由我123452 分钟前
Java 开发使用 MyBatis PostgreSQL 问题:使用了特殊字符而没有正确转义
java·开发语言·数据库·postgresql·java-ee·mybatis·学习方法
源码获取_wx:Fegn08953 分钟前
基于springboot + vue图书商城系统
java·vue.js·spring boot·后端·spring·课程设计
C语言小火车5 分钟前
红黑树(C/C++ 实现版)—— 用 “带配重的书架” 讲透本质
c语言·开发语言·c++·红黑树
未秃头的程序猿5 分钟前
解决ShardingSphere分片算法在Devtools热重启后SpringUtil.getBean()空指针问题
java·后端
阿里嘎多学长5 分钟前
2025-12-10 GitHub 热点项目精选
开发语言·程序员·github·代码托管
better_liang5 分钟前
每日Java面试场景题知识点之-RabbitMQ
java·消息队列·rabbitmq·面试题·异步通信·企业级开发·系统解耦