Consul适配GaussDB开源开发任务心得
代码仓库
https://github.com/qixia1998/GaussConsul
开发过程
Consul是一个用于服务发现的平台,因此在适配GaussDB前,选择使用 go zero 来开发两个微服务,一个用于与GaussDB数据交互的 user 服务,一个用于给GaussDB做健康检查的 gauss 服务。然后让 Consul 自动发现这两个服务,并注册到 Consul 中。
这里我们每个微服务中:
- api - 对外的BFF服务,接受来自客户端的请求,暴露HTTP接口
- rpc - 对内的微服务,仅接受来自内部其他微服务或者BFF的请求,暴露gRPC接口
参考项目工程目录如下:
这里我们需要根据 user 服务设计一个简单的用户表 参考 model 里面的 user.sql。
go zero 给我们提供了一个 goctl model 工具,这里我们使用 goctl model 进行数据库模型代码生成,由于PostgreSQL 仅支持从数据库连接生成。
因为直接使用 goctl model 连接出现问题,在这里想的是先将SQL在PG中执行,然后我们用这个 goctl model 连接PostgreSQL生成数据库模型代码提供给GaussDB来使用,后面使用过程中满足我们的要求参考 goctl model 文档 https://go-zero.dev/docs/tutorials/cli/model
goctl model pg datasource --url="postgres://postgres:postgrespw@127.0.0.1:55000/postgres?sslmode=disable" --table="user,student" --dir .
这里需要保证的是SQL需要兼容GaussDB和PostgreSQL最好。
关于go zero api规范参考:https://go-zero.dev/docs/tasks/dsl/api
在 gauss 服务中,提供了一个用于 GaussDB 健康检查的接口,在 user 服务中提供了CURD接口给外部调用。
总结
关于goctl model工具无法直接连接到GaussDB生成模型代码,但是可以先基于PostgreSQL生成模型代码,再修改连接驱动为GaussDB的驱动,将模型代码给GaussDB使用即可。
验证截图
验证思路
启动 user rpc 服务和 user api 服务,然后启动 gauss api和gauss rpc 服务,在 Consul 中我们可以看到 gauss-rpc 服务和 user-rpc 已经被自动发现和注册到 Consul中了。然后再调用我们对外提供的 API 接口,确认服务的可用性。
Consul
这里可以看到我们启动的两个 rpc 服务已经注册到了Consul中。
对外的 API 接口
- 点赞
- 收藏
- 关注作者
评论(0)