Easy Note 项目实战总结 | 青训营笔记

184 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

写在前面

  • 如果是在找项目部署运行所遇到的错误的同学
  • 请查看目录直接跳转到实战中所遇到的错误
  • 希望对你有所帮助 !

Easy Note 项目实战

Easy Note 实战

项目环境

  • go 1.18.3
  • centos 7.9
  • docker 20.10.18
  • docker-compose 1.18.0

项目启动

部署容器

检查docker是否启动

systemctl status docker

启动 docker

systemctl start docker

使用 docker-compose 部署容器
由于我的 centos 中 docker-compose 的版本问题无法支持 3.7
因此需要修改 docker-compose.yaml 文件首行的版本信息

修改为 version:"3"

修改完毕后开始部署

docker-compose up

部署完毕

easynote.png


启动服务

# start user service
cd cmd/user
sh build.sh
sh output/bootstrap.sh

# start note service
cd cmd/note
sh build.sh
sh output/bootstrap.sh

user service 监听 9000 端口 service_user.png

note service 监听 10000 端口 service_note.png

note、user 服务通过 etcd 做到服务注册
因而 api 服务可以通过 etcd 实现服务发现


启动 HTTP 服务

# start http service
cd cmd/api
go run .

http service 监听 8080 端口 service_hertz.png

http 服务通过 etcd 做到服务发现,作为系统的访问入口 api,接收请求,返回响应

api结构.png

  • handler / demoapi

    • api_service.go
      • 实现 IDL 定义的接口
    • handler.go
      • 实现响应信息结构体以及发送响应的方法
  • rpc /

    • init.go
      • 服务统一初始化入口
    • service_name.go
      • 请求某服务获得相关操作的 db 响应

API 调用

Register

regi.png


Login

login.png


create note

createn.png


query note

query.png


update note

update.png


delete note

del.png


实战中遇到的错误

提示拒绝访问

防火墙端口未开放
// 开放端口
firewall-cmd --zone=public --add-port=16686/tcp --permanent
// 重启防火墙使配置生效
firewall-cmd --reload

执行脚本报错

$'\r': 未找到命令
  • 出现原因:脚本在 window 系统中写,然后上传到 linux 服务器运行
build.sh:行3: $'\r': 未找到命令  
chmod: 无法访问"output/bootstrap.sh\r": 没有那个文件或目录  
build.sh:行7: $'\r': 未找到命令  
build.sh:行13: 语法错误: 未预期的文件结尾
  • 解决方案:编辑脚本文件,设置换行符的格式
set ff=unix

grgn.png


curl 访问失败

curl: option --data-raw: is unknown
  • 出现原因:本机 curl 的版本不支持 data-raw
curl: option --data-raw: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
  • 解决方案:data-raw 改为 data 即可
curl --location --request POST '127.0.0.1:8080/v2/user/register' \
--header 'Content-Type: application/json' \
--data '{
    "username":"username",
    "password":"password"
}'

数据库字段未知

响应 message 提示 Unknown column
{
    "code":10001,
    "message":"Error 1054: Unknown column 'username' in 'where clause'",
    "data":null
}
  • 出现原因:User 结构体中的 Username 字段没有采用大驼峰命名导致被 gorm 解析为 user_name 从而 MySQL 表中找不到 username 字段

  • 查看数据库表,发现确实是没有 username 这个字段的

sq.png

  • 解决方案:进入数据库修改字段为 username 即可
alter table user change user_name username varchar(128);

errsq.png


总结

通过这次实战,熟悉了 IDL 在 Hertz 和 Kitex 中存在的必要性,理解了 Hertz 与 Kitex 的项目结构,强化了对 Hertz 和 Kitex 的体系理解,同时也加深了对 gorm 自动建表的一些问题的理解


参考文档

Kitex 使用手册

Hertz 使用手册

Easy Note官方 GitHub地址