当前位置: 首页 > news >正文

go集成nacos

1,go集成nacos 注册实例与注销实例

package mainimport ("fmt""github.com/nacos-group/nacos-sdk-go/clients""github.com/nacos-group/nacos-sdk-go/clients/naming_client""github.com/nacos-group/nacos-sdk-go/common/constant""github.com/nacos-group/nacos-sdk-go/vo""io/ioutil""net""net/http""os""os/signal""strconv""syscall"
)var client naming_client.INamingClient/*
*
注册实例
*/
func Init(ip string, port uint64, serviceName string, logDir string, cacheDir string, namespaceId string, ipLocal string) {sc := []constant.ServerConfig{{IpAddr: ip,Port:   8848,},}cc := constant.ClientConfig{NamespaceId:         namespaceId, // 如果有命名空间,填上对应的命名空间IDTimeoutMs:           5000,NotLoadCacheAtStart: true,LogDir:              logDir,CacheDir:            cacheDir,LogLevel:            "error",}var err errorclient, err = clients.CreateNamingClient(map[string]interface{}{"serverConfigs": sc,"clientConfig":  cc,})if err != nil {fmt.Println(err)}// 注册实例instance := &vo.RegisterInstanceParam{Ip:          ipLocal,Port:        port,ServiceName: serviceName,Weight:      10,ClusterName: "DEFAULT",Enable:      true,Healthy:     true,Ephemeral:   true,Metadata:    map[string]string{"version": "1.0"},}success, err := client.RegisterInstance(*instance)if err != nil {fmt.Println("Nacos 注册实例失败 err=", err)return}if success {fmt.Println("Nacos 注册实例成功")}instances, err := client.SelectInstances(vo.SelectInstancesParam{ServiceName: "hall",GroupName:   "DEFAULT_GROUP",HealthyOnly: true, //HealthyOnly参数是一个可选参数,如果设置为true,则表示只返回健康的服务实例})if err != nil {fmt.Println("查询指定服务的实例信息 err=", err)}for _, instance := range instances {fmt.Println(instance.ServiceName + " " + instance.Ip + ":" + fmt.Sprint(instance.Port))}// 模拟服务运行http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Println(w, "Hello, this is my Go service!")})fmt.Println("服务启动成功 port=", port)err = http.ListenAndServe(":"+strconv.FormatUint(port, 10), nil)if err != nil {return}
}/*
*
注销实例
*/
func DeregisterInstance(port uint64, serviceName string, ip string) {// 注销实例instance := &vo.DeregisterInstanceParam{Ip:          ip,Port:        port,ServiceName: serviceName,Cluster:     "DEFAULT",GroupName:   "DEFAULT_GROUP",Ephemeral:   true,}success, err := client.DeregisterInstance(*instance)if err != nil {fmt.Println("Nacos 注销实例失败 err=", err)}if success {fmt.Println("Nacos 注销实例成功")}
}func Exit(port uint64, serviceName string, ip string) {// 创建一个通道来接收信号sigCh := make(chan os.Signal, 1)// 监听指定的信号signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)// 启动一个 goroutine 来处理接收到的信号go func() {// 等待信号sig := <-sigChfmt.Println("接收到信号:", sig)// 在这里执行程序关闭前的清理操作// 在这里编写你的程序逻辑fmt.Println("开始关闭程序")DeregisterInstance(port, serviceName, ip)fmt.Println("关闭程序-end all")// 退出程序os.Exit(0)}()
}func GetIp(local bool) string {var ip = ""if local {ip = nip()} else {ip = wip()}fmt.Println("GetIp=" + ip)return ip
}/*
*
获取内网ip
*/
func nip() string {ifaces, err := net.Interfaces()if err != nil {fmt.Println(err)return ""}for _, iface := range ifaces {addrs, err := iface.Addrs()if err != nil {fmt.Println(err)continue}for _, addr := range addrs {ipnet, ok := addr.(*net.IPNet)if ok && !ipnet.IP.IsLoopback() && ipnet.IP.To4() != nil {ip := ipnet.IPfmt.Println(ip.String())return ip.String()}}}return ""
}/*
*
获取外网ip
*/
func wip() string {resp, err := http.Get("https://api.ipify.org?format=text")if err != nil {fmt.Println(err)return ""}defer resp.Body.Close()ip, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println(err)return ""}fmt.Println(string(ip))return string(ip)
}func main() {ip := "127.0.0.1"var port uint64 = 8080serviceName := "gs-serviceTest"logDir := "/data/giftpanel/nacosLogs"cacheDir := "/data/giftpanel/nacosCache"namespaceId := "gs-test"//GetIp(false)localIp := GetIp(true)Exit(port, serviceName, localIp)Init(ip, port, serviceName, logDir, cacheDir, namespaceId, localIp)
}
http://www.lryc.cn/news/258235.html

相关文章:

  • NLP项目实战01--电影评论分类
  • Linux vmstat命令:监控系统资源
  • php爬虫规则与robots.txt讲解
  • Ray使用备注
  • 个人介绍以及毕业去向
  • 原创度检测,在线文章原创度检测
  • windows下安装git中文版客户端
  • 短视频怎么批量添加水印logo
  • 一文入门 UUID
  • kafka学习笔记--broker工作流程、重要参数
  • 多合一iPhone 解锁工具:iMyFone LockWiper iOS
  • 在设计和考虑建造室外雨水收集池时需要注意的因素
  • C_5练习题答案
  • 使用 Axios 进行网络请求的全面指南
  • 已解决java.lang.exceptionininitializererror异常的正确解决方法,亲测有效!!!
  • 深度学习 Day10——T10数据增强
  • ky10 x86 一键安装wvp gb28181 pro平台
  • FPGA时序分析与约束(0)——目录与传送门
  • Linux 驱动开发需要掌握哪些编程语言和技术?
  • Android studio生成二维码
  • python——第十六天
  • JWT介绍及演示
  • Android Studio新版UI介绍
  • 基于ssm应急资源管理系统论文
  • K8S学习指南(9)-k8s核心对象init pod
  • 以太坊:前世今生与未来
  • vue3若依框架,在页面中点击新增按钮跳转到新的页面,不是弹框,如何实现
  • 【大模型】800万纯AI战士年末大集结,硬核干货与音乐美食12月28日准时开炫
  • linux配置python环境
  • 【教程】app备案流程简单三部曲即可完成