zeromicro / go-zero

A cloud-native Go microservices framework with cli tool for productivity.

Home Page:https://go-zero.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

当 rpc 未启动时,api 调用会失败,但是 rpc 启动时,api 调用还是会失败

CrazyZard opened this issue · comments

runtime error: invalid memory address or nil pointer dereference\ngoroutine 135 [running]:\nruntime/debug.Stack()\n\t/usr/local/go/src/runtime/debug/stack.go:24 +0x65\ngithub.com/tal-tech/go-zero/rest/handler.RecoverHandler.func1.1()\n\t/Users/haoran/go/pkg/mod/github.com/tal-tech/go-zero@v1.2.1/rest/handler/recoverhandler.go:16 +0x66\npanic({0x220a4c0, 0x3322b40})\n\t/usr/local/go/src/runtime/panic.go:1038 +0x215\nwl-captain/service/admin/rpc/sys/sysclient.(*defaultSys).UserInfo(0x32d3b68, {0x265a458, 0xc00034a5d0}, 0x40)

这是你代码里出现访问nil对象了。

现象是 :

  1. api 启动时 请求接口 会 panic 抛出空指针异常
  2. rpc 启动时 请求接口 还是会出现相同情况
  3. 只有 rpc 先行启动 api 后者启用 才不会出现 空指针的现象

疑问:

  1. api 层在初始化之后 client 一但是 nil 对象 是否就只能进行重启做尝试
  2. 还是说可能我写法有问题 导致会出现这种问题

你需要先启动依赖的rpc服务,然后再启动api服务,因为这样是为了避免运维故障,这也是我们工程经验的积累。