service.go檔案
//初始化etcdctl
func
newservice()
*service
, dialtimeout:
10*time.second,
} client,
_:=clientv3.
new(config)
return
&service
}//註冊服務
func
(this *service)
regservice
(id string
,name string
,address string
)error
//put值
_,err=kv.
put(ctx,key_prefix+id+
"/"+name,address,clientv3.
withlease
(leaseres.id)
)if err!=
nil//自動續租
keepaliveres,err := lease.
keepalive
(context.
todo()
,leaseres.id)
if err!=
nil//列印續租資訊, keepaliveres是個唯讀channel
goliskeepalive
(keepaliveres)
return
nil}
//列印續租資訊
func
liskeepalive
(keepaliveres <-
chan
*clientv3.leasekeepaliveresponse)}}
}//反註冊服務
)//初始化etcdctl
service:=util.
newservice()
serviceid:=
"p1"
//服務id
servicename:=
"productservice"
//服務名
serviceaddr:=
"192.168.16.30"
//服務位址
serviceport:=
8081
//服務埠
//錯誤channel
errchan:=
make
(chan
error
)//初始化http
//開啟http服務
)//訊號監聽go(
func()
)() geterr:=
<-errchan
err:=service.
unregservice
(serviceid)
//反註冊
if err!=
nil//可以執行一些 **工作,譬如關閉資料庫
}啟用p1.go, 進入etcd容器,獲取鍵值成功
/usr/bin # ./etcdctl get /services/p1/productservice
/services/p1/productservice
192.168.16.30:8081
Go實現簡單的Socket服務端筆記 三
利用goroutine實現同時多個客戶端連線 將資料讀取放入單獨的方法中,利用goroutine執行 本文 檢視github 要實現多個客戶端連線,需要將每個客戶端放入單獨的執行緒處理,通常我們使用多執行緒實現這個功能,但go語言提供的 goroutine,可以非常方便的實現並行 goroutine...
使用 Go 語言實現優雅的伺服器重啟
go被設計為一種後台語言,它通常也被用於後端程式中。服務端程式是go語言最常見的軟體產品。在這我要解決的問題是 如何乾淨利落地公升級正在執行的服務端程式。image 在基於unix的作業系統中,signal 訊號 是與長時間執行的程序互動的常用方法.如果收到sighup訊號,優雅地重啟程序需要以下幾...
服務計算 Go語言實現selpg
3.程式測試 4.參考資料 使用golang開發linux命令列中的selpg io,實現了一系列非平台相關的 io 相關介面和實現,比如提供了對 os 中系統相關的 io 功能的封裝。我們在進行流式讀寫 比如讀寫檔案 時,通常會用到該包。os exec,執行外部命令,它包裝了 os.startpr...