使用Golang工具快速搭建社区后端服务集群

使用Golang工具快速搭建社区后端服务集群 社区集群是一个由gRPC服务rpc网关服务两类服务组成的微服务集群。gRPC服务是独立的功能实现模块,而rpc网关服务主要服务于将请求转发到gRPC服务并组装数据。

社区集群服务是使用sponge工具构建的,该工具在生成gRPC服务和rpc网关服务代码时,会自动分离业务逻辑和非业务逻辑代码。将业务逻辑与非业务逻辑分离的好处在于,它允许开发人员专注于核心业务逻辑代码,大大降低了构建微服务集群的难度,并减少了手动编码的需求。点击查看微服务集群的完整项目代码

hb


更多关于使用Golang工具快速搭建社区后端服务集群的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于使用Golang工具快速搭建社区后端服务集群的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


// 使用sponge工具快速搭建社区后端服务集群示例

// 1. 安装sponge工具
// go install github.com/zhufuyi/sponge/cmd/sponge@latest

// 2. 创建gRPC服务
// sponge micro rpc --module-name=user --server-name=user --project-name=community
// 这将生成用户服务的完整代码结构,自动分离业务逻辑和非业务逻辑

// 3. 生成的目录结构示例:
/*
community/
├── api/
│   ├── user/
│   │   └── v1/
│   │       └── user.proto    # 定义gRPC接口
├── cmd/
│   └── user/
│       └── main.go          # 服务启动入口
├── internal/
│   ├── cache/               # 缓存层(非业务逻辑)
│   ├── config/              # 配置管理(非业务逻辑)
│   ├── dao/                 # 数据访问层(非业务逻辑)
│   ├── ecode/               # 错误码(非业务逻辑)
│   ├── model/               # 数据模型(非业务逻辑)
│   ├── rpcclient/           # RPC客户端(非业务逻辑)
│   └── service/             # 业务逻辑实现
│       └── user.go          # 专注编写业务逻辑代码
└── scripts/                 # 部署脚本(非业务逻辑)
*/

// 4. 业务逻辑示例 - internal/service/user.go
package service

import (
	"context"
	"errors"

	pb "community/api/user/v1"
	"community/internal/dao"
)

type userService struct {
	pb.UnimplementedUserServer
	dao dao.Dao
}

func NewUserService() pb.UserServer {
	return &userService{
		dao: dao.NewDao(),
	}
}

// 专注编写业务逻辑,无需关心非业务代码
func (s *userService) CreateUser(ctx context.Context, req *pb.CreateUserRequest) (*pb.CreateUserReply, error) {
	// 业务逻辑验证
	if req.Name == "" {
		return nil, errors.New("user name is empty")
	}
	
	// 调用DAO层(非业务逻辑已自动生成)
	userID, err := s.dao.CreateUser(ctx, req.Name, req.Email)
	if err != nil {
		return nil, err
	}
	
	return &pb.CreateUserReply{
		Id:   userID,
		Name: req.Name,
	}, nil
}

// 5. 创建rpc网关服务
// sponge micro http --module-name=gateway --server-name=gateway --project-name=community
// 这将生成网关服务,自动处理请求转发和响应组装

// 6. 网关服务示例 - 自动生成的HTTP处理器
/*
// 自动生成的代码将gRPC服务暴露为HTTP API
func init() {
	api_community.RegisterUserHandlerFromEndpoint(
		context.Background(),
		mux,
		"localhost:8282", // gRPC服务地址
		[]grpc.DialOption{grpc.WithInsecure()},
	)
}
*/

// 7. 配置服务发现和负载均衡
// sponge工具自动集成服务注册发现
import (
	"github.com/zhufuyi/sponge/pkg/servicerd/registry"
	"github.com/zhufuyi/sponge/pkg/servicerd/registry/etcd"
)

func main() {
	// 自动生成的代码包含服务注册
	etcdRegistry := etcd.NewRegistry(
		registry.WithAddress([]string{"localhost:2379"}),
	)
	
	// 服务自动注册到etcd
	server := grpc.NewServer(
		grpc.Registry(etcdRegistry),
		grpc.Name("user.service"),
		grpc.Version("v1.0.0"),
	)
}

// 8. 快速启动集群
// 使用sponge生成的Makefile命令
// make run    # 启动单个服务
// make docker # 构建Docker镜像
// make deploy # 部署到Kubernetes

// 9. 监控和日志自动集成
// sponge自动集成Prometheus指标和日志收集
import (
	"github.com/zhufuyi/sponge/pkg/gin/middleware"
	"github.com/prometheus/client_golang/prometheus/promhttp"
)

// 自动添加的中间件
// router.Use(middleware.Metrics())    // 指标收集
// router.Use(middleware.Logging())    // 日志记录
// router.Use(middleware.Recovery())   // 异常恢复

sponge工具通过代码生成将gRPC服务、网关服务、服务注册发现、监控等非业务逻辑自动化,开发者只需在internal/service/目录下编写类似上面的业务逻辑代码即可快速构建完整的微服务集群。

回到顶部