在实际的项目中,我们以go-zero 作为gRpc 网关,由网关将请求路由至后端gRpc 微服务。采用nacos作为配置中心和服务发现。打造高可用的微服务网关。整体架构如下:
但面临的问题是: go-zero默认以 ETCD作为服务发现, 而nacos 作为服务发现需要自己去实现,文档在这块也是缺失的,参考的资料凤毛鳞角,给广大开发者带来困拢。
于是看到开源项目:
https://github.com/zeromicro/zero-contrib/tree/main/zrpc/registry
问题是开源项目只给出了 用户名/密码这种连接nacos的认证方式,并不支持 accessKey/secretKey这种方式。
而阿里云的accessKey/secretKey连接方式安全性较高,是推荐的一种连接方式。
故在开源项目https://github.com/zeromicro/zero-contrib/tree/main/zrpc/registry的基础上,我们作了修改
并发布了新的服务。
_ "github.com/alanjiang/go-zero-rpc-nacos"
- main.go
package main
import (
"github.com/zeromicro/go-zero/core/logx"
"net/http"
"flag"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/gateway"
_ "github.com/alanjiang/go-zero-rpc-nacos"
)
var configFile = flag.String("f", "etc/gateway.yaml", "config file")
func main() {
flag.Parse()
var c gateway.GatewayConf
conf.MustLoad(*configFile, &c)
gw := gateway.MustNewServer(c)
defer gw.Stop()
gw.Start()
}
- etc/gateway.yaml
Target: nacos://accessKey:secretKey@nacos服务器域名:8848/logistic.rpc?namespaceid=空间ID&timeout=13000ms
Mappings:
- Method: put
Path: /logistic/query
RpcPath: logistic.LogisticService/Query
通过以上的配置就可实现查询 服务名为 :logistic.rpc 的快递服务。
注:网关不需要注册客户端。
引入 _ "github.com/alanjiang/go-zero-rpc-nacos" 会自动执行 builder.go 的 init 方法。
func init() {
fmt.Print("----> nacos init <-----")
resolver.Register(&builder{})
}