zoukankan      html  css  js  c++  java
  • 同时注册多个服务

    package main
    
    import (
        "context"
        "flag"
        "fmt"
        "github.com/gorilla/mux"
        uuid "github.com/satori/go.uuid"
        "goetcd/util"
        "log"
        "net/http"
        "os"
        "os/signal"
        "strconv"
        "syscall"
    )
    
    func main()  {
        name:=flag.String("name","","服务名称")
        port:=flag.Int("p",0,"服务端口")
        flag.Parse()
        if *name==""{
            log.Fatal("请指定服务名")
        }
        if *port==0{
            log.Fatal("请指定端口")
        }
    
    
    
    
        service:=util.NewService()
        serviceID:=uuid.NewV4().String()  //这里改动了,服务id随机生成
        serviceName:=*name //注意这里,从flag取到的是指针数据
        serviceAddr:="192.168.29.1"
        servicePort:=*port //注意这里
    
        router:=mux.NewRouter()
        router.HandleFunc("/product/{id:\d+}", func(writer http.ResponseWriter, request *http.Request) {
            vars:=mux.Vars(request)
            str:="get product ByID:"+vars["id"]
            writer.Write([]byte(str))
        })
    
        errChan:=make(chan error)
    
        httpServer:=&http.Server{
            Addr:":"+strconv.Itoa(servicePort),
            Handler:router,
        }
        go(func() {
            err:=service.RegService(serviceID,serviceName,serviceAddr+":"+strconv.Itoa(servicePort))
            if err!=nil{
                errChan<-err
                return
            }
            err=httpServer.ListenAndServe()
            if err!=nil{
                errChan<-err
                return
            }
        })()
    
        go(func(){
            sig:=make(chan os.Signal)
            signal.Notify(sig,syscall.SIGINT,syscall.SIGTERM)
            errChan<-fmt.Errorf("%s",<-sig)
        })()
    
        getErr:=<-errChan
        err:=service.UnregService(serviceID)//反注册
        if err!=nil{
            fmt.Println(err)
        }
        //可以执行一些 回收工作,譬如关闭数据库
        err=httpServer.Shutdown(context.Background())
        if err!=nil{
            log.Fatal(err)
        }
        log.Fatal(getErr)
    
    }




  • 相关阅读:
    System.in.read() 回车
    eclipse for C/C++
    J2EE和Java EE
    MySQL中的string类型
    javac: 无效的标记: FilesJavajdk1
    java eclipse com.mysql.jdbc.Driver
    (转)apache外网不能访问分析与解决方法
    jvm调优
    java性能调优03
    java性能调优02
  • 原文地址:https://www.cnblogs.com/hualou/p/12071068.html
Copyright © 2011-2022 走看看