# 微服务(完结 待优化) **Repository Path**: HaoWangRabbit/adrabbitgo ## Basic Information - **Project Name**: 微服务(完结 待优化) - **Description**: 从0实现微服务框架 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-08 - **Last Updated**: 2024-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微服务框架🐋 #### 介绍 从0实现微服务框架 🔥🔥🔥 #### 项目历程 2024.4.08 - 2024.4.23 历时 15 天,跟着视频 完成 实现微服务框架这个项目😊😊 ———————— 🍇🍈🍉🍊🍋🍌🍍🥭🍎🍏🍐🍑🍒🍓🥝🍅🥥🥑🍆🥔🥕🌽🌶️ ———————— 这里想说一说项目流程,从 Golang 标准库 net/http 的 ListenAndServe 开始,一步一步搭建框架。 - 🍇 路由实现 - 简单的路由实现 - 路由分组 - Restful 风格请求方式 Get、Post、Delete、Put 等 - 实现同一个路由路径下支持不同的请求方式 - 前缀树路由匹配 - 🍈 中间件 - 前置中间件、后置中间件 - 通用级别中间件(路由组级别生效) - 路由级别中间件(路由级别生效) - 🍉 页面渲染 - HTML 页面渲染 - HTML Template 模版支持 - 模版提前加入缓存(预加载) - JSON 渲染、XML 渲染 - 下载文件、重定向 - 重构 抽象JSON、XML渲染行为和重定向步骤 提供接口 - 🍊 参数处理 - query - 普通类型 - Map 类型 - post - 表单参数 - 文件参数 - JSON 传参 - 反射校验 - 结构体 - 切片 - 引入第三方校验器 - https://github.com/go-playground/validator - 单例模式 采用 sync.once 生成 校验器 - 抽象 参数处理 提供接口 - 🍋 日志处理 - 普通日志 - 日志中间件 - 日志格式化输出 - 修改日志参数颜色 - 分级日志 - 分级 - debug - info - error - 格式化+颜色 - 字段支持 - 多种格式化日志 - json 格式化日志 - 日志文件存储 - 不同级日志分开存储 - 根据日志大小进行文件切分 - 🍌 错误处理 - recover 中间件 - 打印错误栈帧 - 🍍 协程池 - 引子 - GMP 模型 - 大量创建 GoRoutine 造成的损耗代价 - 协程池的实现 - worker 定时清除 - 协程池优化 - sync.pool - sync.Cond - 异常处理 - 🥭 认证 - Https 支持 - Basic 认证 - 摘要认证 - JWT 令牌认证 - 登陆认证 - token 刷新 - JWT 中间件 - 🍎 配置文件 - toml 文件配置支持 - 🍏 ORM - Insert - 单个 - 批量 - Update - Select - 单个 - 批量 - Delete - 多条件查询 - 聚合函数支持 - 原生 Sql 语句执行 支持 - 事务支持 - begin - commit - rollback - 🍐 微服务 - 微服务演变 - 🍑 RPC - Http - Http(http 1.0)支持 - Grpc(http 2.0)支持 - TCP - Gob 序列化协议 - protobuf 序列化协议 - 🍒 注册中心 - nacos 集成支持 - etcd 集成支持 - 🍓 网关 - 网关实现 - 🥝 服务容错 - 服务雪崩问题的解决方法? - 隔离 - 超时限流 - 熔断 - 降级 - 限流实现 - 限流算法 - 计数器 - 滑动窗口 - 漏桶 - 令牌桶 - Go 自己提供的限流器 实现限流 - 基于令牌桶 - 熔断实现 - 降级实现 - 🍅 链路追踪 - jaeger 链路追踪 集成 - 单体 链路追踪 - 分布式 链路追踪 ———————— 🍇🍈🍉🍊🍋🍌🍍🥭🍎🍏🍐🍑🍒🍓🥝🍅🥥🥑🍆🥔🥕🌽🌶️ ———————— #### 仓库文件目录说明(待更新) ```bash │ go.work # work 文件 定义工作区 同工作区内可以不添加到 mod 的引用列表 │ README.md │ ├─.idea │ .gitignore # Git操作 忽略部分文件 防止没用文件上传 │ ├─blog # 博客项目 用来测试 rabbitgo 编写的web微服务框架 │ go.mod # mod 记录项目引用的配置文件 │ main.go # 主程序入口 运行此文件 用来测试 │ └─rabbitgo # 实现微服务框架 context.go # 上下文 结构体(类) 实现 go.mod # mod 记录框架引用的配置文件(自己做框架尽量少引用其他配置,用go原生工具包) rabbitgo.go # 框架主编写文件 tree.go # 路由 前缀树 实现 tree_test.go # 前缀树测试 utils.go # 工具类 ```