gin使用consul和nacos
【摘要】 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)