基于Golang+Kratos+MySQL+Redis+Kafka+elk+Opentracing实现的微服务项目
github地址
效果展示 功能描述房源列表房源详情 (TODO)点击房源title,代表查看了房源,会生成一条查看历史记录输入用户名进行登录看房历史记录 (TODO) 技术点
.
├── README.md
├── api
│ ├── account
│ ├── history
│ └── house
├── app
│ ├── account
│ ├── history
│ └── house
├── deploy
│ └── docker
├── docs
│ └── images
├── gen
├── go.mod
├── go.sum
├── openapi.yaml
├── pkg
│ └── job
├── third_party
│ ├── README.md
│ ├── errors
│ ├── google
│ ├── protoc-gen-openapiv2
│ └── validate
└── web
├── admin
└── kfan
微服务项目结构
通过kratos构建工具生成,新增了job子目录
.
├── Dockerfile
├── Makefile
├── README.md
├── cmd
│ ├── history
│ └── job
├── configs
│ └── config.yaml
├── generate.go
└── internal
├── biz
├── conf
├── data
├── job
├── server
└── service
运行
- docker-compose运行
cd deploy/docker && make kfan-run
- 清除容器
make clean并发的使用
errgroup 的并行链路请求
并行请求多个服务获取详情信息
代码位置
eg, ctx := errgroup.WithContext(ctx)
for _, history := range histories {
history := history
eg.Go(func() error {
house, err := h.data.h1.GetHouse(ctx, &housepb.GetHouseRequest{Id: history.ObjId})
if err != nil {
return err
}
history.ObjDetail = structs.Map(house)
return nil
})
eg.Go(func() error {
account, err := h.data.a1.GetAccount(ctx, &accountpb.GetAccountRequest{Id: int32(history.UserId)})
if err != nil {
return err
}
history.Username = account.GetName()
return nil
})
}
err = eg.Wait()
开发命令
生成proto代码
kratos proto client api/account/service/v1/account.proto
- 创建volume
docker volume create kfan-db调试
- SaveHistory
grpcurl -d '{"obj_id": 2,"obj_type": "house","user_id": 1}' -plaintext 127.0.0.1:9002 api.history.service.v1.History/SaveHistory
- GetHistory
grpcurl -d '{"user_id": 1}' -plaintext 127.0.0.1:9002 api.history.service.v1.History/GetHistory



