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

一、考虑可扩展性

分析

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

实现

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

二、考虑持久化

分析

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

实现

  1. 消息队列的持久化可以通过两个组件实现:队列索引(queue index)和消息存储(message store)。队列索引负责维护消息在队列中的位置以及消息是否已被传递和确认。每个队列都有一个队列索引。消息存储是用于存储消息的键值存储,在每个虚拟主机(vhost)中的所有队列之间共享。消息可以直接存储在队列索引中,也可以写入消息存储。
相关推荐
2501_9444241229 分钟前
Flutter for OpenHarmony游戏集合App实战之连连看路径连线
android·开发语言·前端·javascript·flutter·游戏·php
C系语言30 分钟前
python用pip生成requirements.txt
开发语言·python·pip
燃于AC之乐33 分钟前
深入解剖STL Vector:从底层原理到核心接口的灵活运用
开发语言·c++·迭代器·stl·vector·源码分析·底层原理
Leo July7 小时前
【Java】Spring Security 6.x 全解析:从基础认证到企业级权限架构
java·spring·架构
星火开发设计7 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
码道功成7 小时前
Pycham及IntelliJ Idea常用插件
java·ide·intellij-idea
TTGGGFF8 小时前
控制系统建模仿真(一):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·matlab
消失的旧时光-19438 小时前
第四篇(实战): 订单表索引设计实战:从慢 SQL 到毫秒级
java·数据库·sql
2501_944424128 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
それども8 小时前
@ModelAttribute vs @RequestBody
java