下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第GogRPC超時(shí)控制Deadlines用法詳解目錄Deadlines為什么要設(shè)置gRPCClientServer驗(yàn)證總結(jié)
Deadlines
今天將介紹gRPCDeadlines的用法,這一個(gè)必備技巧。內(nèi)容也比較簡單。
Deadlines意指截止時(shí)間,在gRPC中強(qiáng)調(diào)TL;DR(Toolong,Dontread)并建議始終設(shè)定截止日期,為什么呢?
為什么要設(shè)置
當(dāng)未設(shè)置Deadlines時(shí),將采用默認(rèn)的DEADLINE_EXCEEDED(這個(gè)時(shí)間非常大)
如果產(chǎn)生了阻塞等待,就會(huì)造成大量正在進(jìn)行的請求都會(huì)被保留,并且所有請求都有可能達(dá)到最大超時(shí)
這會(huì)使服務(wù)面臨資源耗盡的風(fēng)險(xiǎn),例如內(nèi)存,這會(huì)增加服務(wù)的延遲,或者在最壞的情況下可能導(dǎo)致整個(gè)進(jìn)程崩潰
gRPC
Client
funcmain(){
ctx,cancel:=context.WithDeadline(context.Background(),time.Now().Add(time.Duration(5*time.Second)))
defercancel()
client:=pb.NewSearchServiceClient(conn)
resp,err:=client.Search(ctx,amp;pb.SearchRequest{
Request:"gRPC",
iferr!=nil{
statusErr,ok:=status.FromError(err)
ifok{
ifstatusErr.Code()==codes.DeadlineExceeded{
log.Fatalln("client.Searcherr:deadline")
log.Fatalf("client.Searcherr:%v",err)
log.Printf("resp:%s",resp.GetResponse())
context.WithDeadline:會(huì)返回最終上下文截止時(shí)間。第一個(gè)形參為父上下文,第二個(gè)形參為調(diào)整的截止時(shí)間。若父級時(shí)間早于子級時(shí)間,則以父級時(shí)間為準(zhǔn),否則以子級時(shí)間為最終截止時(shí)間
funcWithDeadline(parentContext,dtime.Time)(Context,CancelFunc){
ifcur,ok:=parent.Deadline();okamp;amp;cur.Before(d){
//Thecurrentdeadlineisalreadysoonerthanthenewone.
returnWithCancel(parent)
c:=amp;timerCtx{
cancelCtx:newCancelCtx(parent),
deadline:d,
propagateCancel(parent,c)
dur:=time.Until(d)
ifdur=0{
c.cancel(true,DeadlineExceeded)//deadlinehasalreadypassed
returnc,func(){c.cancel(true,Canceled)}
c.mu.Lock()
deferc.mu.Unlock()
ifc.err==nil{
c.timer=time.AfterFunc(dur,func(){
c.cancel(true,DeadlineExceeded)
returnc,func(){c.cancel(true,Canceled)}
context.WithTimeout:很常見的另外一個(gè)方法,是便捷操作。實(shí)際上是對于WithDeadline的封裝
funcWithTimeout(parentContext,timeouttime.Duration)(Context,CancelFunc){
returnWithDeadline(parent,time.Now().Add(timeout))
status.FromError:返回GRPCStatus的具體錯(cuò)誤碼,若為非法,則直接返回codes.Unknown
Server
typeSearchServicestruct{}
func(s*SearchService)Search(ctxcontext.Context,r*pb.SearchRequest)(*pb.SearchResponse,error){
fori:=0;ii++{
ifctx.Err()==context.Canceled{
returnnil,status.Errorf(codes.Canceled,"SearchService.Searchcanceled")
time.Sleep(1*time.Second)
returnpb.SearchResponse{Response:r.GetRequest()+"Server"},nil
funcmain(){
而在Server端,由于Client已經(jīng)設(shè)置了截止時(shí)間。Serve
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天然氣儲(chǔ)罐運(yùn)營管理制度
- 全套餐飲店鋪運(yùn)營制度
- 物業(yè)微信運(yùn)營推廣制度
- 班級管理制度
- 汽車租賃運(yùn)營管理制度
- 項(xiàng)目運(yùn)營匯報(bào)管理制度
- 完善景區(qū)運(yùn)營制度
- 淘寶店運(yùn)營管理制度
- 礦山砂石場運(yùn)營管理制度
- 清華運(yùn)營制度
- 深圳大疆在線測評行測題庫
- 金屬廠生產(chǎn)制度
- 2026安徽淮北市特種設(shè)備監(jiān)督檢驗(yàn)中心招聘專業(yè)技術(shù)人員4人參考題庫及答案1套
- 2025年航空行業(yè)空客智能制造報(bào)告
- 蒙牛乳業(yè)股份有限公司盈利能力分析
- 2025民航西藏空管中心社會(huì)招聘14人(第1期)筆試參考題庫附帶答案詳解(3卷合一版)
- (新教材)2026年人教版八年級下冊數(shù)學(xué) 21.2.1 平行四邊形及其性質(zhì) 課件
- 設(shè)備保養(yǎng)維護(hù)規(guī)程
- 2025年東營中考物理真題及答案
- DL-T+5860-2023+電化學(xué)儲(chǔ)能電站可行性研究報(bào)告內(nèi)容深度規(guī)定
- GB/T 46425-2025煤矸石山生態(tài)修復(fù)技術(shù)規(guī)范
評論
0/150
提交評論