Files
ocean/README.md
konjacpotato cd4079c24d
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 30s
file: add taskqueue worker process image thumbnail
2025-06-02 22:09:53 +08:00

247 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# godemo
这是一个使用Go语言开发的示例项目用于演示Go语言的基础知识。
## 目录结构
```
godemo/ # 项目根目录
├── README.md # 项目说明文档
├── go.mod # Go模块定义
├── go.sum # 依赖校验
├── docker/ # Docker文件目录
└── docker-gateway/ # gateway服务的Docker文件目录
├── etc/config.yaml # gateway服务配置文件用于配置启动服务Optional
├── Dockerfile # gateway服务的Dockerfile文件
└── docker-compose.yml # gateway服务的docker-compose文件
├── sql/ # 数据库SQL定义
└── users.sql # 用户表SQL文件
├── api/ # HTTP服务定义
└── gateway.api # gateway服务的HTTP API定义文件
├── rpc/ # RPC服务定义
└── user.proto # user服务的RPC定义文件
├── user/ # 用户服务
├── gateway/ # 网关服务
... ...
```
## 基于.proto生成RPC服务代码
```bash
# 在项目的根目录执行以user服务为例
> goctl rpc protoc [rpc/user.proto] --go-grpc_out=[user] --go_out=[user] --zrpc_out=[user]
```
## 基于.api生成HTTP服务代码
```bash
# 在项目的根目录执行以gateway服务为例
> goctl api go -api [api/gateway.api] -dir [gateway]
```
## 基于数据库生成模型层代码
```bash
# 在项目的根目录执行以category服务为例
> goctl model pg datasource -url="postgres://postgres:postgres@localhost:19732/godemo?sslmode=disable" -schema="public" -table="categories" -dir="./category/internal/model"
```
**说明**
数据表的定义在sql目录下到postgres执行对应的数据表文件然后用上面的命令生成模型层代码。
后续模型层增加接口可以在internal/model/categoriesmodel.go中增加接口定义以category服务为例
)。
## 整合模型层代码
生成的模型层代码要被业务代码使用需要引入到业务代码中。主要修改三个地方以category服务为例
```go
# etc/category.yaml 增加下面的配置
DB:
DataSource: postgres://postgres:postgres@localhost:19732/godemo?sslmode=disable
MaxOpenConns: 100
MaxIdleConns: 20
ConnMaxLifetime: 3600
# internal/config/config.go
type Config struct {
zrpc.RpcServerConf
DB struct {
DataSource string
MaxOpenConns int
MaxIdleConns int
ConnMaxLifetime int
}
}
# internal/svc/serviceContext.go
import (
"godemo/category/internal/config"
"godemo/category/internal/model"
_ "github.com/lib/pq"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
type ServiceContext struct {
Config config.Config
CategoryModel model.CategoriesModel
}
func NewServiceContext(c config.Config) *ServiceContext {
conn := sqlx.NewSqlConn("postgres", c.DB.DataSource)
return &ServiceContext{
Config: c,
CategoryModel: model.NewCategoriesModel(conn),
}
}
```
## 创建Dockerfile
```bash
# 在项目的根目录执行以category服务为例
> goctl docker -go [category/category.go]
```
生成的Dockerfile里面有些路径需要修改也有些内容需要增加。
然后再docker目录创建[docker-category]文件夹把Dockerfile移动到docker-category文件夹下。
## 创建docker-compose.yml
在Dockerfile同级目录创建docker-compose.yaml内容可以参考下面的category服务的。另外需要在当前目录创建etc文件夹把服务的配置文件拷贝到etc文件夹下并命名为config.yaml。
```yml
services:
category:
image: category:v1
container_name: category
restart: always
volumes:
- ./etc:/app/etc
networks:
- godemo_network
# 端口映射,生产环境非必须,开发环境用于方便调试
ports:
- "60300:60300"
networks:
godemo_network:
name: godemo_network
external: true
```
## 编译Docker镜像
```bash
# 在项目的根目录执行以file服务为例
> docker build -t [file:v1] -f [docker/docker-file/Dockerfile] .
```
## 运行Docker容器
```bash
# 在对应服务的docker目录执行以file服务为例
docker/docker-file> docker compose up -d
```
## RPC服务测试/调试
```bash
# 查看60200端口下的RPC服务提供的服务
> grpcurl -plaintext localhost:60200 list
# 查看某个服务提供的接口
> grpcurl -plaintext localhost:60200 list file.File
# 调用某个接口
> grpcurl -d '{\"file_id\": \"aaaa/333333333333.png\"}' -plaintext localhost:60200 file.File/GetFileUrl
```
## 网关服务
## 用户服务
**接口定义**
- 用户注册
- 用户登录
- 获取用户信息
- 用户注销
## 文件服务
- 文件上传
- 获取文件URL下载文件
- 文件删除
**对于存储在MinIO的图片文件**
```
bucket/image_id.png
```
原始图片类似上面的文件名,其中```image_id```支持多级文件夹。支持异步生成缩略图操作,缩略图文件名格式为:缩略图类型/原始图片的bucket/image_id.png。以```thumbnail```为例:```thumbnail/bucket/image_id.png```。
```dev
# 上传文件
grpcurl -d '{\"filename\": \"1a.png\", \"folder\": \"zhang san/li si\", \"bucket\": \"wallpaper\", \"content\": \"iVBORw0KGgoAAAANSUhEUgAAAC8AAAAhCAYAAABJLfLcAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAVhSURBVFhH7ZZpbJRFGMd/8777Lu1u6UFpC9tDCqVFDkGOgFDlLHJIQUDQGCFgpOIHvnBpqZRbBEm1FFAwFUzEKxJjKoGABDQoJIggV6jUSmi70O1BW3bb7R7jh22lLPuuQRMbTH/JZLPzzPvMM/95npkRo0aNkjykKP4dDxMdwbcXHcG3F//34AXdJqxg+wfvs+utefQP9bffRbE8zcp3d7CjYD1zU42+TqGgquq/aorwn8mHwb/jfhSEMYSwsM5oTg0dPy1omCIiidQa0QBQSZy2mrWze6B4/9l1IhQPv3++mvXfluP1s+kqryVPJ+e9AvLz81g1oycaICJG8OqWfPK357M5awRRAoQQCCEAgdJGIkVVfQuVEq+USP+GQDFoaJqGZlARBBgjJdLrH/JdhN4NqyXPYcPa6SSo/hYf9Wf38ol1LPMnxKG0ehAGjJ0MKEg8zU7qL+9n/bZjVAaYQXtkBjm5s+llBMeFQnK2HqNSN06JDOBDN3glIoG0+AgUBJ0ff46sKSlo1afYu+coVq+CdDsJG7mYJRO66aZS05V9ZG88isOSgiWs7SiF6CfmkZWRhEFW89NHuzlS5mpjv4u3oYKSiob7UoagwWtGNEUgpUr3SctYMzcNreo423I/5nIjSKkR07svSeFttiY0jWdeyqCHoZIf93/JzzfLuHjOStycDeRmJqCziUHwUF60jlWfXiPQ0nQKNpIRr21i8bDwFlWF77fraJYWjPYNaS5mf85GDl/vRs/Ien4ra0DpHsVEADzcLjnDqeJmQCOuxWuT9QqXyh2YEwfQJ06ltuRXSmo9AGixaTyW1JnG8otctjoxxfejb3df2euhW7C0FKKv/dXZpkANWCYsZ/vOLbz+8miSDCCEvjsAt/U4hXn7OFnpAbxUn/mM/Lw88vJ28vWlO0ig+foR9uQVcsLqW1QwdJSv4/SupZzfI5BSIbpfOsMSQ8FdzaWTZyhrwldEkenEPDmA/r0nMnXg9+y2BsxAHTSSn81l51RfNqtGUxAlA6MzXuJxOrDb7TgcDtwxw5g2axYzx6dgdNix2+3Y7Q4c5ac48kstUkQzZPJILDpS6OF1OXE6W5o7UEkGR3e68KFZrFk0BLOUKMZQjABR6SzJH46U4K44xDsbD3D5h7PYRo4nNnU8GX3O+LsJgovrRZtZ900ZHoykvriJN6d09x8UFB3lQSpGQs1mwsLCMBlbzgnViMlkxmw2Y+7k63MUn+TUtXKunDjGuSr3vU6CohI7agErs7PJzl7GC4MjdI9cPXSVbyo+wJacIpCCyOHzWZKZglZ9kt3bD3LDLZDuBirdgLzKF2tXICWolqlM83eki0J4fBp941v/t5xoD4Cu8q7b5ZSWllL6RynWutbKb6bulpVbNQ00q9Ekp8YR4nsBACADXYO6uLj2VQ6vLFzIwgVZbDhs5UG+Rl/5cNLGjmOgJYrIqCi6JlowAKLLUywtGIOqCkBiO1FAvisSg+Ki2duJhPQRJBoBjxdvgIeYNKUwJjOWrqE+W4hlKBmTmgEIjWlJzc5pjMtMoIv57wtY54Y1MXDR2ywf3SXIVnooP7SVD2/P5I3nU30F3YrjAoXZb/OdTQIaveb+pzesk+qKKhpdIbjqblNju8VNq5WKm7ew2WzYqqqpra2n/s4dROpQamUqca2rlE1cP17Eadv9mjRcOczBczUB3yn3ohA9aDITHzX7G+5BR3kQqgHF68YT0NqGkBh6JkUg3G5cTgf1NTXUNbrb5K+BrmmDSY02IB03OH/uBo57HATCRMKggSSZBO7qYs5erSLQOaYb/MOA7mnzMNARfHvREXx70RF8e/EnBBEDlIbPjKIAAAAASUVORK5CYII=\"}' -plaintext localhost:60200 file.File/Upload
# 获取文件URL
grpcurl -d '{\"file_id\": \"zhangsan/a24c8397-d373-4eb7-a563-b0c9c3f4591c.png\"}' -plaintext localhost:60200 file.File/GetFileUrl
# 图片处理
grpcurl -d '{\"file_id\": \"gallery/tian gou/xiao mao/2d805261-422e-4b2a-ac24-60eb8af7a17b.png\", \"versions\": [1]}' -plaintext localhost:60200 file.File/GenerateImageVersions
```
## 分类服务
分类服务Category Service这是一个用于统一管理多系统/多模块分类体系的微服务。
- 支持多级分类
- 通过system_id支持多系统分类
```dev
# 增
grpcurl -plaintext -d '{\"system_id\": \"ecommerce\",\"name\": \"Electronics\",\"alias\": \"electronics\",\"parent_id\": \"\"}' localhost:60300 category.Category/CreateCategory
# 删
grpcurl -plaintext -d '{\"id\": \"fe8d31d5-11f4-4ddd-a4ac-76d358faed2b\"}' localhost:60300 category.Category/DeleteCategory
# 改
grpcurl -plaintext -d '{\"id\": \"d628cf35-539f-4533-a5a2-492d729ecf3b\",\"name\": \"New Electronics Name\"
}' localhost:60300 category.Category/UpdateCategory
# 查
grpcurl -plaintext -d '{\"id\": \"d628cf35-539f-4533-a5a2-492d729ecf3b\"}' localhost:60300 category.Category/GetCategory
# 查询某一分类的完整分类(从根分类到当前分类)
grpcurl -plaintext -d '{\"id\": \"da24a78c-ad51-4e82-8aa9-b35342f7ef30\"}' localhost:60300 category.Category/GetFullCategories
```
## 图库服务
**接口定义**
- 获取图片列表
- 获取图片详情
- 获取分类
- 上传图片
- 删除图片
- 修改图片
- 获取图片URL
- 下载图片
```dev
# 上传图片
grpcurl -d '{\"file_name\": \"1a.png\", \"category_id\": \"da24a78c-ad51-4e82-8aa9-b35342f7ef30\", \"title\": \"背景\", \"file_content\": \"iVBORw0KGgoAAAANSUhEUgAAAC8AAAAhCAYAAABJLfLcAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAVhSURBVFhH7ZZpbJRFGMd/8777Lu1u6UFpC9tDCqVFDkGOgFDlLHJIQUDQGCFgpOIHvnBpqZRbBEm1FFAwFUzEKxJjKoGABDQoJIggV6jUSmi70O1BW3bb7R7jh22lLPuuQRMbTH/JZLPzzPvMM/95npkRo0aNkjykKP4dDxMdwbcXHcG3F//34AXdJqxg+wfvs+utefQP9bffRbE8zcp3d7CjYD1zU42+TqGgquq/aorwn8mHwb/jfhSEMYSwsM5oTg0dPy1omCIiidQa0QBQSZy2mrWze6B4/9l1IhQPv3++mvXfluP1s+kqryVPJ+e9AvLz81g1oycaICJG8OqWfPK357M5awRRAoQQCCEAgdJGIkVVfQuVEq+USP+GQDFoaJqGZlARBBgjJdLrH/JdhN4NqyXPYcPa6SSo/hYf9Wf38ol1LPMnxKG0ehAGjJ0MKEg8zU7qL+9n/bZjVAaYQXtkBjm5s+llBMeFQnK2HqNSN06JDOBDN3glIoG0+AgUBJ0ff46sKSlo1afYu+coVq+CdDsJG7mYJRO66aZS05V9ZG88isOSgiWs7SiF6CfmkZWRhEFW89NHuzlS5mpjv4u3oYKSiob7UoagwWtGNEUgpUr3SctYMzcNreo423I/5nIjSKkR07svSeFttiY0jWdeyqCHoZIf93/JzzfLuHjOStycDeRmJqCziUHwUF60jlWfXiPQ0nQKNpIRr21i8bDwFlWF77fraJYWjPYNaS5mf85GDl/vRs/Ien4ra0DpHsVEADzcLjnDqeJmQCOuxWuT9QqXyh2YEwfQJ06ltuRXSmo9AGixaTyW1JnG8otctjoxxfejb3df2euhW7C0FKKv/dXZpkANWCYsZ/vOLbz+8miSDCCEvjsAt/U4hXn7OFnpAbxUn/mM/Lw88vJ28vWlO0ig+foR9uQVcsLqW1QwdJSv4/SupZzfI5BSIbpfOsMSQ8FdzaWTZyhrwldEkenEPDmA/r0nMnXg9+y2BsxAHTSSn81l51RfNqtGUxAlA6MzXuJxOrDb7TgcDtwxw5g2axYzx6dgdNix2+3Y7Q4c5ac48kstUkQzZPJILDpS6OF1OXE6W5o7UEkGR3e68KFZrFk0BLOUKMZQjABR6SzJH46U4K44xDsbD3D5h7PYRo4nNnU8GX3O+LsJgovrRZtZ900ZHoykvriJN6d09x8UFB3lQSpGQs1mwsLCMBlbzgnViMlkxmw2Y+7k63MUn+TUtXKunDjGuSr3vU6CohI7agErs7PJzl7GC4MjdI9cPXSVbyo+wJacIpCCyOHzWZKZglZ9kt3bD3LDLZDuBirdgLzKF2tXICWolqlM83eki0J4fBp941v/t5xoD4Cu8q7b5ZSWllL6RynWutbKb6bulpVbNQ00q9Ekp8YR4nsBACADXYO6uLj2VQ6vLFzIwgVZbDhs5UG+Rl/5cNLGjmOgJYrIqCi6JlowAKLLUywtGIOqCkBiO1FAvisSg+Ki2duJhPQRJBoBjxdvgIeYNKUwJjOWrqE+W4hlKBmTmgEIjWlJzc5pjMtMoIv57wtY54Y1MXDR2ywf3SXIVnooP7SVD2/P5I3nU30F3YrjAoXZb/OdTQIaveb+pzesk+qKKhpdIbjqblNju8VNq5WKm7ew2WzYqqqpra2n/s4dROpQamUqca2rlE1cP17Eadv9mjRcOczBczUB3yn3ohA9aDITHzX7G+5BR3kQqgHF68YT0NqGkBh6JkUg3G5cTgf1NTXUNbrb5K+BrmmDSY02IB03OH/uBo57HATCRMKggSSZBO7qYs5erSLQOaYb/MOA7mnzMNARfHvREXx70RF8e/EnBBEDlIbPjKIAAAAASUVORK5CYII=\"}' -plaintext localhost:50000 gallery.Gallery/UploadImage
```