现如今java领域web开发团队大家都喜欢使用springboot快速开发项目,更有很多团队使用微服务的形式来进行项目的研发,所以在go的领域,我们如何把go的项目融入到java中,使go也成为java微服务项目的某一个模块就是一个趋势。
目前java spring cloud 微服务这块在国内使用较多的注册中心和配置中心就是nacos了,所以我们把go项目注册到nacos中就可以融合spring cloud微服务了。
在go语言中,注册到nacos比较简单,我们还是使用前面的演示项目为例
首先安装依赖:
go get github.com/nacos-group/nacos-sdk-go/v2
接着编写核心代码。
// 创建 Nacos 服务器的server配置 serverConfigs := []constant.ServerConfig{ *constant.NewServerConfig("192.168.1.249", 8848), } // 创建客户端配置,包括用户名和密码 clientConfig := *constant.NewClientConfig( constant.WithNamespaceId("49d062f7-b4f7-4561-9698-c00409e5af11"), // 如果有namespace,可以在此设置 constant.WithTimeoutMs(5000), constant.WithNotLoadCacheAtStart(true), constant.WithLogDir("/tmp/nacos/log"), constant.WithCacheDir("/tmp/nacos/cache"), constant.WithUsername("nacos"), // Nacos 用户名 constant.WithPassword("nacos"), // Nacos 密码 ) // 创建 Nacos Naming 客户端 namingClient, err := clients.NewNamingClient( vo.NacosClientParam{ ClientConfig: &clientConfig, ServerConfigs: serverConfigs, }, ) if err != nil { fmt.Printf("Failed to create Nacos naming client: %v\n", err) return } // 注册服务到 Nacos _, err = namingClient.RegisterInstance(vo.RegisterInstanceParam{ Ip: "192.168.1.8", // 实例的IP Port: 48080, // 实例的端口 ServiceName: "go-service", // 服务名称 Weight: 1.0, // 权重 Enable: true, Healthy: true, Ephemeral: false, // 是否是临时实例 Metadata: map[string]string{ "env": "prod", // 自定义元数据 "meta_app_namespace": "go-service", "meta_app_service_account": "go-service", "meta_app_version": "1.0.0", }, })
这段代码只需要在main.go里面执行即可,所以修改下之前的代码,在main.go中添加上面的信息即可,最后完整的main.go代码如下:
package main import ( "awesomeProject/config" "awesomeProject/routes" "fmt" "github.com/fvbock/endless" "github.com/gin-gonic/gin" "github.com/nacos-group/nacos-sdk-go/v2/clients" "github.com/nacos-group/nacos-sdk-go/v2/common/constant" "github.com/nacos-group/nacos-sdk-go/v2/vo" "io" ) func main() { registerToNacos() //关闭gin的日志输出 gin.DefaultWriter = io.Discard //注册验证器 config.InitValidate() //注册日志 config.InitLogger("gin.log") //注册链接数据库 config.ConnectDatabase() //注册链接redis config.ConnectRedis() //初始化限流器 config.InitRate() r := routes.SetupRouter() config.Logger.Info("服务器启动完成") endless.ListenAndServe(":48080", r) } /* * 注册到nacos */ func registerToNacos() { // 创建 Nacos 服务器的server配置 serverConfigs := []constant.ServerConfig{ *constant.NewServerConfig("192.168.1.249", 8848), } // 创建客户端配置,包括用户名和密码 clientConfig := *constant.NewClientConfig( constant.WithNamespaceId("49d062f7-b4f7-4561-9698-c00409e5af11"), // 如果有namespace,可以在此设置 constant.WithTimeoutMs(5000), constant.WithNotLoadCacheAtStart(true), constant.WithLogDir("/tmp/nacos/log"), constant.WithCacheDir("/tmp/nacos/cache"), constant.WithUsername("nacos"), // Nacos 用户名 constant.WithPassword("nacos"), // Nacos 密码 ) // 创建 Nacos Naming 客户端 namingClient, err := clients.NewNamingClient( vo.NacosClientParam{ ClientConfig: &clientConfig, ServerConfigs: serverConfigs, }, ) if err != nil { fmt.Printf("Failed to create Nacos naming client: %v\n", err) return } // 注册服务到 Nacos _, err = namingClient.RegisterInstance(vo.RegisterInstanceParam{ Ip: "192.168.1.8", // 实例的IP Port: 48080, // 实例的端口 ServiceName: "go-service", // 服务名称 Weight: 1.0, // 权重 Enable: true, Healthy: true, Ephemeral: false, // 是否是临时实例 Metadata: map[string]string{ "env": "prod", // 自定义元数据 "meta_app_namespace": "go-service", "meta_app_service_account": "go-service", "meta_app_version": "1.0.0", }, }) if err != nil { panic(err) } fmt.Println("当前服务注册到nacos成功") }
然后把项目运行起来,可以在nacos上看到对应的服务了。
以上我们就完成了把go web项目注册到nacos中的案例了,最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...