# mico **Repository Path**: YCloud160/mico ## Basic Information - **Project Name**: mico - **Description**: 基于grpc-go的微服务框架 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-12 - **Last Updated**: 2025-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mico 微服务框架 ## 简介 Mico 是一个基于 Go 语言的轻量级微服务框架,提供了构建分布式系统所需的核心功能,包括服务注册发现、负载均衡、gRPC/HTTP 服务支持、日志记录等。框架设计简洁易用,适合快速搭建微服务架构。 ## 特性 - 支持 gRPC 和 HTTP 服务 - 服务注册与发现(基于 etcd) - 自定义负载均衡策略 - 上下文元数据管理 - 结构化日志记录(基于 zap) - 错误处理与封装 - 配置化管理 ## 安装 确保你已安装 Go 1.16 或更高版本。使用以下命令获取 Mico: ```bash go get github.com/YCloud160/mico ``` ## 快速开始 项目提供了示例应用 `example/hello`,展示如何使用 Mico 构建一个简单的 gRPC 服务。 ### 示例服务 ```go // server.go type Greeter struct{} func (g *Greeter) SayHello(ctx context.Context, req *pb.SayHelloReq) (*pb.SayHelloResp, error) { return &pb.SayHelloResp{Msg: "Hello, " + req.GetMsg()}, nil } func main() { // 初始化配置 mico.InitAppConfig("app.yaml") // 添加 gRPC 服务 mico.AddGrpcServer("hello", func(s *grpc.Server) { pb.RegisterGreeterServer(s, &Greeter{}) }) // 启动服务 if err := mico.Run(); err != nil { log.Fatal(err) } } ``` ### 示例客户端 ```go // client.go func main() { // 初始化配置 mico.InitAppConfig("app.yaml") // 创建 gRPC 客户端 client, err := mico.NewGrpcClient("hello") if err != nil { log.Fatal(err) } // 调用服务 req := &pb.SayHelloReq{Msg: "World"} var resp pb.SayHelloResp if err := client.Invoke(context.Background(), "/pb.Greeter/SayHello", req, &resp); err != nil { log.Fatal(err) } fmt.Println(resp.GetMsg()) } ``` ## 配置 Mico 使用 YAML 文件进行配置,示例配置如下: ```yaml server: hello: addr: ":8080" type: grpc client: default: target: "127.0.0.1:8080" pubsub: etcd: endpoints: - "http://127.0.0.1:2379" ``` ## 中间件 Mico 提供了多种中间件支持: - **服务发现**:基于 etcd 的服务注册与发现 - **负载均衡**:支持自定义负载均衡策略 - **日志**:集成 zap 实现结构化日志记录 - **解析器**:支持 direct 和 etcd 解析器 ## 日志 Mico 使用 zap 作为默认日志库,支持设置日志级别和上下文日志: ```go mico.InitLog("myapp", "server", "/var/log/myapp") mico.SetLevel("debug") mico.Debug("Debug message") mico.Infoc(ctx, "Request received", mico.Any("request", req)) ``` ## 错误处理 Mico 提供了统一的错误封装机制: ```go err := mico.NewError(400, "bad request") mico.Errorc(ctx, "Error occurred", mico.Any("error", err)) ``` ## 贡献 欢迎贡献代码和文档。请先阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 获取贡献指南。 ## 许可证 本项目采用 Apache-2.0 许可证。详情请查看 [LICENSE](LICENSE) 文件。