✨基于 golang, grpc, gin 和 redis, MySQL, etcd 和 vue3 的简单分布式信息管理系统✨📌含完整前后端,微服务:分布式信息管理系统模板,后台管理系统模板,数据库管理系统模板。实现 grpc 微服务远程过程调用,redis 缓存,etcd 服务发现,负载均衡。令牌签验,非对称加密。通过 Web 应用完成对数据库的增删改查(CRUD),文件流的上传和下载。📌前后端分离
🔔 如有项目相关问题,欢迎在本项目提出issue
,我一般会在 24 小时内回复。
架构
缓存弱一致性
缓存强一致性
文件流上传
文件流下载
文件列表
完善的查询
多选删除
编辑行
面包屑导航
go1.20.5
MySQL 8.0.31
Redis 7.2.4
etcd 3.4.31
kafka 3.7.0
(非必要,后续运行时候也会自动安装)
# go mod download
# go get -u gorm.io/driver/sqlite
go get -u gorm.io/driver/mysql
go get -u gorm.io/gorm
go get -u github.com/gin-gonic/gin
go get -u github.com/golang-jwt/jwt/v5
go get -u go.uber.org/zap
go get github.com/go-playground/validator/v10
go get github.com/spf13/viper
go get github.com/gin-gonic/gin/binding@v1.9.1
go get -u github.com/gin-contrib/cors
go get -u github.com/go-redis/redis/v8
go get github.com/go-redsync/redsync/v4
go get github.com/go-redsync/redsync/v4/redis/goredis/v8
go get google.golang.org/grpc
go get -u google.golang.org/protobuf
go get -u go.etcd.io/etcd/client/v3
go get github.com/segmentio/kafka-go
登录mysql
终端,创建数据库:
create database crud_list default charset utf8mb4;
如果需要使用其它数据库,例如 PostgreSQL, SQLite, SQL Server
。./mysql_db/connect_db.go
为数据库配置文件。修改方法,参考 grom 官方文档 数据库连接
docker 安装 etcd
docker run -d --name etcd-server --publish 2379:2379 --publish 2380:2380 --env ALLOW_NONE_AUTHENTICATION=yes --env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 bitnami/etcd:latest
docker 安装 redis
docker run --name myredis -it -p 6379:6379 -v /data/redis-data redis --requirepass "123456"
docker 安装 kafka
docker run -itd -p 9092:9092 --name kafka apache/kafka
以下的几个程序都可以运行多个,都可以运行在不同的服务器上。
./conf/config.yaml
为 api-gateway
层配置文件
# 本服务的监听配置
server:
Addr: 0.0.0.0
Port: 8008
# 用户登录权限数据库
user_db:
DriverName: mysql
Database: crud-list
Port: 3306
UserName: root
Password: 123456
Host: 127.0.0.1 #host.docker.internal #
Charset: utf8mb4
# 用户权限缓存
user_redis:
Addr: "localhost:6379"
Password: "123456"
# 分布式锁
lock_redis:
Addr: "localhost:6379"
Password: "123456"
# 用户权限缓存处理的消息队列
user_cache_kafka:
topic: "user_cache"
broker:
- "127.0.0.1:9092"
# grpc 微服务的注册中心
etcd:
Endpoints:
- "127.0.0.1:2379"
keys:
crud_rpc: crud_rpc
# token 签发配置
token:
shortDuration: 30 # token 有效期(分钟),多久无操作就退出
longDuration: 1440 # 长 token,多久必须重新登陆
编译(会自动安装依赖):
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go build main.go
运行:
.\main
./crud_rpc_server\conf\rpc_server_config.yaml
为 crud-service
层配置文件
- 这里
0.0.0.0
代表运行来自所有 ip 的访问。 Addr
为运行 grpc 服务的服务器地址,提供给注册中心。如果需要启动多个微服务,每个微服务以下配置的Addr
要不同- 必须和 api-gateway 连接到同一个 etcd 注册中心
# 本服务的监听配置和本服务器的地址
server:
Name: crud_rpc
Listen: "0.0.0.0:8080"
Addr: "127.0.0.1:8080"
# 用于增删改查的数据库
crud_db:
DriverName: mysql
Database: crud-list
Port: 3306
UserName: root
Password: 123456
Host: 127.0.0.1 #host.docker.internal #
Charset: utf8mb4
# 服务注册中心配置
etcd:
Endpoints:
- "127.0.0.1:2379"
编译(会自动安装依赖):
cd ./crud_rpc_server
go build rpc_server.go
运行:
.\rpc_server
./kafka_consumer_server/conf/kafka_server_config.yaml
为其配置文件
# 用户权限缓存处理的消息队列配置
user_cache_kafka:
topic: "user_cache"
broker:
- "127.0.0.1:9092"
group_id: "my_group"
# 用户权限缓存
user_redis:
Addr: "localhost:6379"
Password: "123456"
编译:
cd ./kafka_consumer_server
go build kf_server.go
运行:
.\kf_server
浏览器输入 url:
http://localhost:8008/ping
看到以下内容代表服务运行成功
{"message":"请求成功"}
如果希望看到界面,需要用到配套的前端项目📌配套前端项目地址
如果修改了./crud_rpc_server/crud_rpc.proto
需要重新生成代码
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
protoc --go_out=. --go-grpc_out=. --proto_path=. *proto
- https://gorm.io/zh_CN/docs
- https://gin-gonic.com/zh-cn/docs
- https://grpc.io/docs/languages/go/quickstart/
- https://doc.oschina.net/grpc?t=60133
- https://protobuf.dev/programming-guides/proto3/
此翻译版本仅供参考,以 LICENSE 文件中的英文版本为准
MIT 开源许可证:
版权所有 (c) 2023 bytesc
特此授权,免费向任何获得本软件及相关文档文件(以下简称“软件”)副本的人提供使用、复制、修改、合并、出版、发行、再许可和/或销售软件的权利,但须遵守以下条件:
上述版权声明和本许可声明应包含在所有副本或实质性部分中。
本软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权持有人均不对因使用本软件而产生的任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方面。