go-grpc-crud-template

✨基于 golang, grpc, gin 和 redis, kafka, MySQL, etcd 和 vue3 的简单分布式信息管理系统✨📌含完整前后端,微服务:分布式信息管理系统模板,后台管理系统模板,数据库管理系统模板。实现 grpc 微服务远程过程调用,redis 缓存,etcd 服务发现,负载均衡。令牌签验,非对称加密。通过 Web 应用完成对数据库的增删改查(CRUD),文件流的上传和下载。📌前后端分离

源代码可从本项目仓库下载:
📌github
📌gitee

📌在线演示链接

📌配套前端项目地址

个人网站:www.bytesc.top

个人博客:blog.bytesc.top

🔔 如有项目相关问题,欢迎在本项目提出issue,我一般会在 24 小时内回复。

效果展示

CRUD

请添加图片描述

完善的查询

请添加图片描述

多选删除

请添加图片描述

编辑行

请添加图片描述

用户登录

请添加图片描述

面包屑导航

请添加图片描述

文件流

文件流上传

请添加图片描述

文件流下载
请添加图片描述

文件列表
请添加图片描述

项目运行方法

后端运行环境

  • 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 数据库

登录mysql终端,创建数据库:

create database crud_list default charset utf8mb4;

如果需要使用其它数据库,例如 PostgreSQL, SQLite, SQL Server./mysql_db/connect_db.go 为数据库配置文件。修改方法,参考 grom 官方文档 数据库连接

etcd 注册中心

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

redis 缓存

docker 安装 redis

docker run --name myredis -it -p 6379:6379 -v /data/redis-data  redis --requirepass "123456"

kafka 消息队列

docker 安装 kafka

docker run -itd -p 9092:9092 --name  kafka apache/kafka

运行项目程序

以下的几个程序都可以运行多个,都可以运行在不同的服务器上。

项目网关入口 api-gateway

./conf/config.yamlapi-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
grpc 微服务服务端

./crud_rpc_server\conf\rpc_server_config.yamlcrud-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

./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":"请求成功"}

如果希望看到界面,需要用到配套的前端项目📌配套前端项目地址

修改 grpc proto

如果修改了./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 开源许可证:

版权所有 © 2023 bytesc

特此授权,免费向任何获得本软件及相关文档文件(以下简称“软件”)副本的人提供使用、复制、修改、合并、出版、发行、再许可和/或销售软件的权利,但须遵守以下条件:

上述版权声明和本许可声明应包含在所有副本或实质性部分中。

本软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权持有人均不对因使用本软件而产生的任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方面。

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐