上文《kratos微服务实战(七)kratos项目之操作redis》我们已经完成了user-center的服务编写,那么既然是微服务,那么肯定是多个服务的集合,所有的服务都需要注册到注册中心去。在java中最常使用的注册中心是eureka和nacos,那么符合国人大多数的使用场景的就是nacos了,所以本文我们演示下把当前的user-center注册到nacos中去,那么注册到nacos的话,我们总体写代码的思路是这样的:
1、编写配置文件 2、改写配置文件读取utils 3、编写nacos注册的方法 4、注册 nacos注册方法 5、添加nacos注册实例 6、自动注入
所以下面我们来演示下:
一、编写配置文件
在kratos模板项目里面,配置文件在configs/config.yaml文件中,所以如果我们需要添加配置文件的时候,只需要在这个文件中进行添加即可,这里我们添加上nacos的信息
nacos: addr: 192.168.1.249 port: 8848 namespaceId: 0153af57-1fb8-43ef-bfe5-1212e6b43db2
二、改写配置文件读取类
上面在配置文件中添加了nacos的配置信息,那么就需要改写读取配置文件的utils类,使nacos的信息可以被读取到。所以这里我们需要删除掉internal/conf/conf.pb.go文件(因为需要重新生成)。
然后改写conf.proto文件,在Message Data下添加Nacos的数据结构
然后我们重新编译下conf.proto即可
kratos proto client internal/conf/conf.proto
然后就会生成新的conf.pb.go文件
三、安装依赖
使用nacos的话,我们还要安装一些依赖,如下:
go get github.com/go-kratos/kratos/contrib/registry/nacos/v2 go get github.com/go-kratos/kratos/v2/registry go get github.com/nacos-group/nacos-sdk-go/clients go get github.com/nacos-group/nacos-sdk-go/common/constant go get github.com/nacos-group/nacos-sdk-go/vo
这些依赖都是后面编写nacos相关代码需要用到的。
四、编写nacos注册代码
接下来就是编写nacos服务注册的代码了,打开internal/data/data.go文件,在最下方编写一个NewNacosEngine的方法,示例如下:
func NewNacosEngine(c *conf.Data) registry.Registrar { sc := []constant.ServerConfig{ *constant.NewServerConfig(c.Nacos.Addr, c.Nacos.Port), } cc := constant.ClientConfig{ NamespaceId: c.Nacos.NamespaceId, TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "tmp/nacos/log", CacheDir: "tmp/nacos/cache", LogLevel: "debug", } client, err := clients.NewNamingClient( vo.NacosClientParam{ ClientConfig: &cc, ServerConfigs: sc, }, ) if err != nil { panic(err) } return nacos.New(client) }
然后在这个data.go文件中,把这个NewNacosEngine方法给注册下
var ProviderSet = wire.NewSet(NewData, NewGreeterRepo, NewDbEngine, NewAccountRepo, NewRedisEngine, NewNacosEngine)
接下来再进入到cmd/user-center中,打开main.go文件,在newApp这个方法里面添加一个nacos的入参,并且在方法体里面把nacos给注册进去。示例代码如下:
func newApp(logger log.Logger, gs *grpc.Server, hs *http.Server, rg registry.Registrar) *kratos.App { return kratos.New( kratos.ID(id), kratos.Name(Name), kratos.Version(Version), kratos.Metadata(map[string]string{}), kratos.Logger(logger), kratos.Registrar(rg), kratos.Server( gs, hs, ), ) }
然后在main.go文件的init方法里面给Name赋值下:
备注:
1、在goland里面运行krato的模板项目是获取不到service.name,这个service.name对应的就是main函数这里的main,直接获取是null 2、因为直接获取service.name为空,启动项目会报错kratos/nacos: ServiceInstance.Name can not be empty。 3、所以这里我们手动给service.name赋个值,后面启动项目就不会报错了。
五、自动注入
接下来就是惯例的自动注入了,在goland中打开终端
#进入自动注入的页面 cd cmd/user-center #自动注入 wire
六、启动项目
接下来就是启动整个项目:
kratos run
启动之后,我们去nacos的dashboard上看是否注册上去了:
可以看到已经注册上去了。并且同时注册了http和grpc,说明我们这里把服务注册到nacos中是没问题的。
最后按照惯例,附上本案例的源码,登录后即可下载
还没有评论,来说两句吧...