api/main.go

121 lines
2.6 KiB
Go

package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/nacos-group/nacos-sdk-go/clients"
"github.com/nacos-group/nacos-sdk-go/common/constant"
"github.com/nacos-group/nacos-sdk-go/vo"
"log"
"net"
"net/http"
"os"
"strconv"
"strings"
)
var port = "8888"
func initNacos() {
sc := []constant.ServerConfig{
*constant.NewServerConfig("nacos", 8848),
}
cc := constant.ClientConfig{
AppName: "api1",
NamespaceId: "", //namespace id
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
RotateTime: "1h",
MaxAge: 3,
LogLevel: "debug",
}
configParam := vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
}
client, err := clients.NewNamingClient(configParam)
if err != nil {
panic(err)
}
portNum, _ := strconv.Atoi(port)
pp := uint64(portNum)
ip := "api-demo"
if ips := getIps(); ips != nil {
ip = ips[0]
}
success, err := client.RegisterInstance(vo.RegisterInstanceParam{
Ip: ip,
Port: pp,
Weight: 10,
Enable: true,
Healthy: true,
ServiceName: "api1",
Ephemeral: true,
})
log.Println("Nacos注册结果: ", success)
if err != nil {
log.Println("Nacos注册错误信息: ", err.Error())
}
configClient, err := clients.NewConfigClient(configParam)
if err != nil {
log.Fatalf("创建配置连接失败: %v", err.Error())
}
_ = configClient.ListenConfig(vo.ConfigParam{
DataId: "api.yml",
Group: "DEFAULT_GROUP",
OnChange: func(namespace, group, dataId, data string) {
fmt.Println("监控到配置文件变动: group:" + group + ", dataId:" + dataId + ", data:" + data)
},
})
//log.Println("监听配置失败: ", err.Error())
}
func getIps() []string {
addrs, err := net.InterfaceAddrs()
if err != nil {
return nil
}
var ips []string
for _, address := range addrs {
// 检查ip地址判断是否回环地址
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
ip := ipnet.IP.String()
fmt.Println(ip)
ips = append(ips, ip)
}
}
}
//ipStr := strings.Join(aaaa, ",")
return ips
}
func main() {
args := os.Args
if len(args) > 1 {
port = args[1]
}
app := gin.Default()
initNacos()
ipStr := strings.Join(getIps(), ",")
app.GET("/hello", func(context *gin.Context) {
context.String(http.StatusOK, "[GET]-[API]-[latest]\n"+ipStr)
})
app.POST("/hello", func(context *gin.Context) {
context.String(http.StatusOK, "[POST]-[API]-[latest]\n"+ipStr)
})
app.GET("/ip", func(context *gin.Context) {
context.String(http.StatusOK, strings.Join(getIps(), ","))
})
app.Run(fmt.Sprintf(":%v", port))
}