gozero-nacos-demo
所属分类:微服务
开发工具:GO
文件大小:398KB
下载次数:0
上传日期:2022-06-10 06:04:00
上 传 者:
sh-1993
说明: gozero 使用 nacos 2.x 做配置中心和注册中心的完整 demo
(Gozero uses nacos 2. x as a complete demo of the configuration center and registry)
文件列表:
.idea (0, 2022-06-10)
.idea\gozero-nacos-demo.iml (322, 2022-06-10)
.idea\modules.xml (286, 2022-06-10)
.idea\vcs.xml (180, 2022-06-10)
common (0, 2022-06-10)
common\config (0, 2022-06-10)
common\config\gorm.go.go (1757, 2022-06-10)
common\config\nacos.go (4175, 2022-06-10)
common\response (0, 2022-06-10)
common\response\response.go (851, 2022-06-10)
common\swagger (0, 2022-06-10)
common\swagger\handler.go (1153, 2022-06-10)
common\swagger\swagger.go (3045, 2022-06-10)
common\utils (0, 2022-06-10)
common\utils\encryption.go (251, 2022-06-10)
common\utils\file.go (592, 2022-06-10)
common\utils\generic.go (1256, 2022-06-10)
common\utils\host.go (632, 2022-06-10)
common\utils\searchPager.go (3119, 2022-06-10)
common\utils\string.go (697, 2022-06-10)
go.mod (4228, 2022-06-10)
go.sum (101659, 2022-06-10)
imgs (0, 2022-06-10)
imgs\auth.png (41649, 2022-06-10)
imgs\config-list.png (81323, 2022-06-10)
imgs\consumer.png (58310, 2022-06-10)
imgs\demo-api.png (33637, 2022-06-10)
imgs\mysql.png (47233, 2022-06-10)
imgs\service-list.png (67312, 2022-06-10)
imgs\user-rpc.png (37041, 2022-06-10)
microservice (0, 2022-06-10)
microservice\demo (0, 2022-06-10)
microservice\demo\api (0, 2022-06-10)
microservice\demo\api\Makefile (206, 2022-06-10)
microservice\demo\api\demo.api (235, 2022-06-10)
microservice\demo\api\demo.go (907, 2022-06-10)
microservice\demo\api\etc (0, 2022-06-10)
... ...
# 调用逻辑
demo 提供一个 http api 服务,其包含一个 `get /user/:id` 的接口,该接口会通过 rpc 调用 user 服务获取用户信息返回。
# 功能点
## 一行代码完成 nacos 配置加载
经过对 nacos sdk 的多层封装,此时 gozero 服务要获取 nacos 配置及其简单,以 `demo/api/demo.go` 为例,其只需要下面一行就可以完成 nacos 配置的加载:
```go
ctx := svc.NewServiceContext(c, commonConfig.MustLoad(*configFile, c))
```
当然,加载 nacos 配置前 nacos 本身的配置也是必不可少的,所以原来 `etc` 文件夹下现在仅有一个 `nacos.yaml` 配置:
```yaml
Addr: nacos-cs.ops.svc.cluster.local
Port: 8848
Group: DEFAULT_GROUP
DataID: demo-api
ExtDataIDs:
- mysql
- auth
NamespaceID: demo
```
没什么可说的,上面几个字段都和 nacos 的基本概念对应。
要补充的是:
- 该配置支持同时配置多个 `data-id`,`ExtDataIDs` 的优先级比 `DataID` 低,即 `DataID` 对应的配置内容如果和 `ExtDataIDs` 列表包含的配置内容有冲突的话,会优先使用 `DataID`
中的配置;
- `ExtDataIDs` 是一个列表,其加载顺序是从上到下,下面的配置会覆盖前面的配置;
## 简单 RPC 服务的注册
既然配置中心已经使用了 nacos,注册中心再使用另一个中间件就没有必要了。
为了便于后续项目的使用,我对注册逻辑也做了简单的封装。以 `user/rpc/user.go` 为例,要注册其到 nacos 中,仅需要下面一行:
```go
commonConfig.MustRegister(commonConfig.MustLoad(*configFile, c), &c.RpcServerConf)
```
## 快捷的 RPC 调用
既然 user 服务已经注册到 nacos 了,那么其它服务如何调用它呢,直接看 `demo/api/internal/svc/serviceContext.go` 中的代码:
```go
UserRpc: user.NewUser(nc.NewZrpcClient("user.rpc", c.Name)),
```
> 这里的 `"user.rpc"` 为 user 服务注册到 nacos 中的项目名,该名称在 nacos 中进行配置,而 `c.Name` 其实也是取自 nacos 中的配置,即为当前服务的名称,如下图:
> ![服务列表](https://raw.githubusercontent.com/zze326/gozero-nacos-demo/master/imgs/service-list.png)
> ![服务消费者](https://raw.githubusercontent.com/zze326/gozero-nacos-demo/master/imgs/consumer.png)
也是只需要一行,就可以实例化一个 user 服务的 rpc 远程调用对象,将其置入 `ServiceContext` 中就可以在后续的 `logic` 中使用它完成 rpc 调用了。
如 `demo/api/internal/logic/getUserLogic.go` 的第 28 行:
```go
u, err := l.svcCtx.UserRpc.GetUser(l.ctx, &user.GetUserReq{
Id: uint32(req.ID),
})
```
# 补充点
## 配置内容
- 配置列表:
![data id 列表](https://raw.githubusercontent.com/zze326/gozero-nacos-demo/master/imgs/config-list.png)
- demo-api:
![demo-api](https://raw.githubusercontent.com/zze326/gozero-nacos-demo/master/imgs/demo-api.png)
- user-rpc
![user-rpc](https://raw.githubusercontent.com/zze326/gozero-nacos-demo/master/imgs/user-rpc.png)
- auth
![auth](https://raw.githubusercontent.com/zze326/gozero-nacos-demo/master/imgs/auth.png)
- mysql
![mysql](https://raw.githubusercontent.com/zze326/gozero-nacos-demo/master/imgs/mysql.png)
## nacos sdk 版本问题
有一个问题是 gozero 社区仓库中使用 nacos 做注册中心的 demo 引用的 sdk 是适配 nacos 1.x 的,地址:
-
而我使用的 nacos 版本为 2.1.0,所以用其接入 nacos 2.x 的使用过程中总有一些莫名其妙的问题,所以最后我 fork 了它并自行修改了引用的 sdk 支持 nacos 2.x,地址:
-
所以在此项目的 `go.mod` 中可以看到我引用的库为:
```mod
github.com/zze326/zero-contrib/zrpc/registry/nacos v0.0.0-20220526111920-4c5f0ff42470
```
近期下载者:
相关文件:
收藏者: