{"repo":"minbox-projects/message-pipe","free":true,"listed":false,"github":"https://github.com/minbox-projects/message-pipe","clone":"git clone https://github.com/minbox-projects/message-pipe.git","description":"基于Redis客户端Redisson实现负载均衡的分布式消息顺序管道","language":"Java","stars":27,"topics":["grpc-java","redisson","redis","spring","nacos"],"license":"Apache-2.0","category":"databases-storage","readme_excerpt":"Message Pipe - 分布式有序消息处理框架 项目简介 Message Pipe 是一款基于 Redis 实现的分布式顺序消息管道框架。它利用 Redisson 的分布式锁特性确保了线程安全，使得在多线程环境下也能保证消息严格按照写入管道的顺序被消费。 该项目采用了经典的 Client-Server 架构设计： - Server 端 ：负责消息的接收、存储、分发以及管道的管理。 - Client 端 ：负责注册到 Server，并接收 Server 分发的任务进行业务逻辑处理。 两者之间通过 gRPC （基于 Netty）建立长连接进行通信，保证了高效的数据传输。Server 端在分发消息时，会采用负载均衡策略从在线的 Client 列表中选择合适的目标进行顺序发送。 核心架构 Message Pipe 的核心架构围绕着“管道（Pipe）”这一概念展开。每一个业务场景可以对应一个或多个管道，消息被写入特定的管道中。 1. 存储层 ：使用 Redis 的 List 数据结构作为底层消息队列，结合 Redisson 实现分布式锁，确保并发读写的安全性。 2. 通信层 ：使用 gRPC 定义服务接口（Protobuf），实现 Server 与 Client 之间的高性能通信，包括客户端注册、心跳维持、消息推送等。 3. 调度层 ：Server 端维护着多个管道的调度线程，负责从 Redis 中拉取消息并推送到 Client。 Message Pipe 保证：✅ 消息严格有序处理 ✅ 自动重试和死信队列 ✅ 分布式高可用 --- 项目架构 系统架构图 模块结构 --- 核心功能特性 1. 🔒 有序消息处理 (Ordered Message Processing) 特点 ： - 消息严格按写入顺序处理，不允许并发 - 基于 Redis 分布式锁 + 单线程消费 - 支持批量消息处理（默认 200 条/批） 工作原理 ： 代码示例 ： 2. 🔄 智能重试机制 (Intelligent Retry) 特点 ： - 指数退避重试：1s → 2s → 4s → 8s → 16s - 默认最多重试 5 次 - 失败信息存储在 Redis，支持查询和手动处理 重试流程 ： 配置示例 ： 3. ⚰️ 死信队列 (Dead Letter Queue) 特点 ： - 重试失败的消息自动进入 DLQ - 消息保留 30 天，便于追踪和恢复 - 包含完整的失败上下文：失败原因、重试次数、时间戳 数据模型 ： 查询和恢复 ： 4. 🏥 高可用设计 (High Availability) 特点 ： - 客户端自动心跳保活（10 秒间隔） - 离线客户端自动检测和隔离 - 服务端故障自动转移 客户端生命周期 ： 配置示例 ： 5. ⚖️ 负载均衡 (Load Balancing) 特点 ： - 加权随机分配算法 - 支持多客户端分散处理 - 可插拔的负载均衡策略 分配策略 ： 自定义策略示例 ： 6. 🔍 灵活的客户端匹配 (Flexible Client Binding) 特点 ： - 支持精确匹配和正则表达式匹配 - 一个管道可以绑定多个客户端 - 一个客户端可以处理多个管道 两种匹配模式 ： 模式 1：精确匹配 模式 2：正则表达式匹配 7. 📊 可观测性 (Observability) 特点 ： - 实时指标收集：输入数量、处理数量 - 每个管道独立计数 - 支持聚合指标报告 指标数据 ： 查询指标示例 ： 8. 📝 读写分离扩展性 特点 ： - 支持读写","default_branch":null,"files":null,"tree":[],"storefront":"/r/minbox-projects","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/minbox-projects/message-pipe/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}