注册和反注册代码
package utils
import (
consulapi "github.com/hashicorp/consul/api"
"log"
)
var ConsulClient *consulapi.Client
func init() {
config := consulapi.DefaultConfig()
config.Address = "192.168.3.14:8500"
client, err := consulapi.NewClient(config)
if err != nil {
log.Fatal(err)
}
ConsulClient = client
}
func RegService() {
reg := consulapi.AgentServiceRegistration{}
reg.Name = "userservice"
reg.Address = "192.168.3.14"
reg.Port = 8080
reg.Tags = []string{"primary"}
check := consulapi.AgentServiceCheck{}
check.Interval = "5s"
check.HTTP = "http://192.168.3.14:8080/health"
reg.Check = &check
err := ConsulClient.Agent().ServiceRegister(®)
if err != nil {
log.Fatal(err)
}
}
func UnRegService() {
ConsulClient.Agent().ServiceDeregister("userservice")
}
service退出时优雅反注册service
package main
import (
"fmt"
httptransport "github.com/go-kit/kit/transport/http"
mymux "github.com/gorilla/mux"
"gomicro/Services"
"gomicro/utils"
"log"
"net/http"
"os"
"os/signal"
"syscall"
)
func main() {
user := Services.UserService{}
endp := Services.GenUserEnPoint(user)
serverHandler := httptransport.NewServer(endp, Services.DecodeUserRequest, Services.EncodeUserResponse)
r := mymux.NewRouter()
r.Methods("GET", "DELETE").Path(`/user/{uid:\d+}`).Handler(serverHandler)
r.Methods("GET").Path("/health").HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
writer.Header().Set("Content-type", "application/json")
writer.Write([]byte(`{"status":"ok"}`))
})
errChan := make(chan error)
go func() {
utils.RegService()
err := http.ListenAndServe(":8080", r)
if err != nil {
log.Println(err)
errChan <- err
}
}()
go func() {
sigChan := make(chan os.Signal)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
errChan <- fmt.Errorf("%s", <-sigChan)
}()
getErr := <-errChan
utils.UnRegService()
log.Println(getErr)
}