gin使用consul和nacos

举报
yd_254179665 发表于 2025/07/23 11:07:48 2025/07/23
【摘要】 package mainimport ( "context" "fmt" "github.com/gin-gonic/gin" "github.com/hashicorp/consul/api" "log" "net/http" "time")func main() { // 创建Gin路由 router := gin.Default()...
package main

import (
    "context"
    "fmt"
    "github.com/gin-gonic/gin"
    "github.com/hashicorp/consul/api"
    "log"
    "net/http"
    "time"
)

func main() {
    // 创建Gin路由
    router := gin.Default()
    router.GET("/ping", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "pong",
        })
    })

    // 启动Gin服务
    go func() {
        if err := router.Run(":8080"); err != nil {
            log.Fatalf("Failed to start server: %s", err)
        }
    }()

    // 配置Consul客户端
    consulConfig := api.DefaultConfig()
    consulConfig.Address = "127.0.0.1:8500"
    consulClient, err := api.NewClient(consulConfig)
    if err != nil {
        log.Fatalf("Failed to create Consul client: %s", err)
    }

    // 注册服务
    registration := &api.AgentServiceRegistration{
        ID:      "gin-service-1",
        Name:    "gin-service",
        Address: "127.0.0.1",
        Port:    8080,
        Check: &api.AgentServiceCheck{
            HTTP:                           "http://127.0.0.1:8080/ping",
            Interval:                       "10s",
            Timeout:                        "1s",
            DeregisterCriticalServiceAfter: "5m",
        },
    }

    if err := consulClient.Agent().ServiceRegister(registration); err != nil {
        log.Fatalf("Failed to register service: %s", err)
    }

    // 保持服务运行
    select {}
}
package main

import (
    "context"
    "fmt"
    "github.com/hashicorp/consul/api"
    "log"
    "net/http"
)

func main() {
    // 配置Consul客户端
    consulConfig := api.DefaultConfig()
    consulConfig.Address = "127.0.0.1:8500"
    consulClient, err := api.NewClient(consulConfig)
    if err != nil {
        log.Fatalf("Failed to create Consul client: %s", err)
    }

    // 查询服务
    services, _, err := consulClient.Health().Service("gin-service", "", true, nil)
    if err != nil {
        log.Fatalf("Failed to query service: %s", err)
    }

    if len(services) == 0 {
        log.Fatalf("No services found")
    }

    // 选择第一个服务
    service := services[0]
    url := fmt.Sprintf("http://%s:%d/ping", service.Service.Address, service.Service.Port)

    // 发送请求
    resp, err := http.Get(url)
    if err != nil {
        log.Fatalf("Failed to send request: %s", err)
    }
    defer resp.Body.Close()

    fmt.Printf("Response: %s\n", resp.Status)
}
package main

import (
    "context"
    "fmt"
    "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"
    "log"
    "net/http"
    "time"
)

func main() {
    // 创建Gin路由
    router := gin.Default()
    router.GET("/ping", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "pong",
        })
    })

    // 启动Gin服务
    go func() {
        if err := router.Run(":8080"); err != nil {
            log.Fatalf("Failed to start server: %s", err)
        }
    }()

    // 配置Nacos客户端
    clientConfig := constant.ClientConfig{
        TimeoutMs:           5000,
        BeatInterval:        5000,
        NotLoadCacheAtStart: true,
        LogDir:              "/tmp/nacos/log",
        CacheDir:            "/tmp/nacos/cache",
        LogLevel:            "debug",
    }

    serverConfigs := []constant.ServerConfig{
        {
            IpAddr: "127.0.0.1",
            Port:   8848,
        },
    }

    namingClient, err := clients.NewNamingClient(
        vo.NacosClientParam{
            ClientConfig:  &clientConfig,
            ServerConfigs: serverConfigs,
        },
    )
    if err != nil {
        log.Fatalf("Failed to create Nacos client: %s", err)
    }

    // 注册服务
    serviceName := "gin-service"
    instance := &vo.RegisterInstanceParam{
        Ip:          "127.0.0.1",
        Port:        8080,
        ServiceName: serviceName,
        Weight:      1.0,
        Enable:      true,
        Healthy:     true,
        Metadata:    map[string]string{"version": "1.0.0"},
    }

    if err := namingClient.RegisterInstance(*instance); err != nil {
        log.Fatalf("Failed to register service: %s", err)
    }

    // 保持服务运行
    select {}
}
package main

import (
    "context"
    "fmt"
    "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"
    "log"
    "net/http"
)

func main() {
    // 配置Nacos客户端
    clientConfig := constant.ClientConfig{
        TimeoutMs:           5000,
        BeatInterval:        5000,
        NotLoadCacheAtStart: true,
        LogDir:              "/tmp/nacos/log",
        CacheDir:            "/tmp/nacos/cache",
        LogLevel:            "debug",
    }

    serverConfigs := []constant.ServerConfig{
        {
            IpAddr: "127.0.0.1",
            Port:   8848,
        },
    }

    namingClient, err := clients.NewNamingClient(
        vo.NacosClientParam{
            ClientConfig:  &clientConfig,
            ServerConfigs: serverConfigs,
        },
    )
    if err != nil {
        log.Fatalf("Failed to create Nacos client: %s", err)
    }

    // 查询服务
    serviceName := "gin-service"
    instances, err := namingClient.SelectInstances(vo.SelectInstancesParam{
        ServiceName: serviceName,
        HealthyOnly:  true,
    })
    if err != nil {
        log.Fatalf("Failed to query service: %s", err)
    }

    if len(instances) == 0 {
        log.Fatalf("No services found")
    }

    // 选择第一个服务
    instance := instances[0]
    url := fmt.Sprintf("http://%s:%d/ping", instance.Ip, instance.Port)

    // 发送请求
    resp, err := http.Get(url)
    if err != nil {
        log.Fatalf("Failed to send request: %s", err)
    }
    defer resp.Body.Close()

    fmt.Printf("Response: %s\n", resp.Status)
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。