基于 golang, grpc, gin 和 redis, kafka, MySQL, etcd 和 vue3 的简单分布式信息管理系统

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值