You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.4 KiB

package main
import (
"flag"
"fmt"
"github.com/google/uuid"
"github.com/hashicorp/consul/api"
"log"
"net/http"
)
func main() {
// 处理命令行参数
addr := flag.String("addr", "127.0.0.1", "The Address for listen. Default is 127.0.0.1")
port := flag.Int("port", 8080, "The Port for listen. Default is 8080.")
flag.Parse()
// 定义业务逻辑服务,假设为产品服务
service := http.NewServeMux()
service.HandleFunc("/info", func(writer http.ResponseWriter, request *http.Request) {
_, err := fmt.Fprintf(writer, "Product Service.")
if err != nil {
log.Fatalln(err)
}
})
// 定义注册中心的服务
serviceReg := new(api.AgentServiceRegistration)
serviceReg.Name = "Product"
serviceReg.ID = "productService-" + uuid.NewString()
serviceReg.Address = *addr
serviceReg.Port = *port
serviceReg.Tags = []string{"test"}
// 注册服务
// 连接 consul ,作为客户端连接 consul
consulApiConfig := api.DefaultConfig()
consulApiConfig.Address = "192.168.177.131:8500"
consulClient, err := api.NewClient(consulApiConfig)
if err != nil {
log.Fatalln(err)
}
// 发出 put 注册请求
if err := consulClient.Agent().ServiceRegister(serviceReg); err != nil {
log.Fatalln(err)
}
log.Println("Service Product has be registered.")
// 启动监听
address := fmt.Sprintf("%s:%d", *addr, *port)
fmt.Printf("Product service is listening on %s.\n", address)
log.Fatalln(http.ListenAndServe(address, service))
}