现如今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中的案例了,最后按照惯例,附上本案例的源码,登录后即可下载。










还没有评论,来说两句吧...