国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

go-zero踩坑:在api層邏輯代碼中設置context超時時間,傳遞到rpc層邏輯代碼時設置的context超時時間消失 + api層和rpc層Timeout配置說明

這篇具有很好參考價值的文章主要介紹了go-zero踩坑:在api層邏輯代碼中設置context超時時間,傳遞到rpc層邏輯代碼時設置的context超時時間消失 + api層和rpc層Timeout配置說明。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在api層邏輯代碼中設置context超時時間,傳遞到rpc層邏輯代碼時設置的context超時時間消失

我在用go-zero時,在api層傳遞contextrpc層,但報錯:rpc error:DeadlineExceeded desc = context deadline exceeded,這是上下文超時導致的(客戶端用的上下文是context.WithTimeout超時時間小于服務端的返回時間,造成context deadline exceeded)。為解決報錯,我在api層使用“ctx, cancel := context.WithTimeout(context.Background(), time.Hour*3)”,再將ctx替換原本的context傳到rpc層,最后還是報同樣的錯誤。我使用debug追蹤代碼后發(fā)現(xiàn)是這個go-zero中的的攔截器導致的:

這個方法的參數(shù)是攔截器獲取的,具體可以看一下這個博客:https://www.lixueduan.com/posts/grpc/05-interceptor/

一旦執(zhí)行這個攔截器,它會將api層設置的Rpc: Timeout作為api層傳入context的父context的超時時間進行設置,若父context或子contextapi層傳入context)超時時間結束,請求會被直接終止。若沒有設置Rpc: Timeout,則默認2s

解決方案:

我通過在apirpc層的yml文件中設置Timeout解決了這個問題。

我們在api層邏輯代碼中設置context超時時間,傳遞到rpc層邏輯代碼時,設置的context超時時間其實并沒有消失,只是我們在api層傳入的context變成了子context,它的父context超時時間結束時,整個請求都會被結束,所以我們必須要設置父context的超時時間才行。文章來源地址http://www.zghlxwxcb.cn/news/detail-507498.html

api層和rpc層Timeout配置說明

Api層
yml配置:
Name: msm-api    # 服務名
Host: 0.0.0.0
Port: 90XX
Mode: dev

Log:
  ServiceName: msm-api
  Mode: console
  Level: error

Timeout: 10000 # 10s,api請求的響應超時時間,若超過10s還未返回則結束請求。該超時時間會被api層初始化的的context作為超時時間進行設置,若再新建一個context則不會被使用,而使用默認或自定義的超時時間

#rpc service
MsmRpcConf:
  Endpoints:
    - 127.0.0.1:9XXX
  NonBlock: true
  Timeout: 10000  # 10s,設置rpc的超時時間,該超時時間會被攔截器TimeoutInterceptor作為api層傳入context的父context的超時時間進行設置,若父context或子context(api層傳入context)超時時間結束,請求會被直接終止。
配置結構體:
package config

import (
   "github.com/zeromicro/go-zero/zrpc"
   "github.com/zeromicro/go-zero/rest"
)

type Config struct {
   rest.RestConf
   MsmRpcConf zrpc.RpcClientConf
}
Rpc層
yml配置:
Name: aliyunmsm-rpc # 服務名
ListenOn: 0.0.0.0:9XXX # 服務監(jiān)聽地址
Mode: dev

Timeout: 10000 # 10s,設置rpc服務的響應的超時時間,若超過10s還未返回則結束請求

Log:
  ServiceName: aliyunmsm-rpc
  Mode: console
  Level: error

Redis:
  Host: 192.168.5.X:6379
  Type: node
DB:
  DataSource: root:XXX@tcp(127.0.0.1:3306)/XXX_micro?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
Cache:
  - Host: 192.168.5.X:6379

配置結構體:
package config

import (
	"github.com/zeromicro/go-zero/zrpc"
	"github.com/zeromicro/go-zero/core/stores/cache"
)

type Config struct {
	zrpc.RpcServerConf

	DB struct {
		DataSource string
	}

	Cache cache.CacheConf
}

到了這里,關于go-zero踩坑:在api層邏輯代碼中設置context超時時間,傳遞到rpc層邏輯代碼時設置的context超時時間消失 + api層和rpc層Timeout配置說明的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于go-zero的api服務刨析并對比與gin的區(qū)別

    基于go-zero的api服務刨析并對比與gin的區(qū)別

    官網(wǎng)go-zero go-zero是一個集成了各種工程實踐的微服務框架,集多種功能于一體,如服務主要的API服務,RPC服務等。除了構建微服務工程外,zero也是一款性能優(yōu)良的web框架,也可以構建單體web應用。 更多移步www.w3cschool.cn/go-zero。 go的web框架是很多的,例如github較為流行的有:

    2024年02月13日
    瀏覽(25)
  • 【go-zero】(1):嘗試使用go-zero的工具goctl進行model,controller代碼生成,配置數(shù)據(jù)庫,實現(xiàn)FindAll方法,查詢數(shù)據(jù)庫全部數(shù)據(jù)

    【go-zero】(1):嘗試使用go-zero的工具goctl進行model,controller代碼生成,配置數(shù)據(jù)庫,實現(xiàn)FindAll方法,查詢數(shù)據(jù)庫全部數(shù)據(jù)

    本文的原文連接是: https://blog.csdn.net/freewebsys/article/details/128707849 未經博主允許不得轉載。 博主CSDN地址是:https://blog.csdn.net/freewebsys 博主掘金地址是:https://juejin.cn/user/585379920479288 博主知乎地址是:https://www.zhihu.com/people/freewebsystem 項目地址: https://go-zero.dev/cn/ go-zero 是一個集

    2023年04月24日
    瀏覽(25)
  • 【go-zero】go-zero分布式鎖實戰(zhàn) | apifox測試go-zero分布式鎖方式

    包地址:github.com/zeromicro/go-zero/core/stores/redis 使用場景: 為了防止并發(fā)的下載相同的excel 我們通過redis鎖來控制請求相同的excel下載 個人思路: req為API傳入的請求參數(shù) 然后加密成md5的字符串,這樣可以處理 相同的請求

    2024年02月15日
    瀏覽(17)
  • go-zero系列:接入Prometheus

    go-zero系列:接入Prometheus

    參考文檔:https://zhuanlan.zhihu.com/p/463418864 https://prometheus.io/download/ 進入下載文件夾,比如prometheus-2.44.0.windows-amd64。 然后雙擊Prometheus.exe啟動軟件。 啟動后,可以訪問 http://127.0.0.1:9090/。就能查看Prometheus后臺。 然后重啟go-zero項目,能看到輸出日志:Starting prometheus agent at 0.0.

    2024年02月16日
    瀏覽(19)
  • go-zero學習 第一章 基礎

    go-zero學習 第一章 基礎

    因官網(wǎng)重新改版,本文是基于官網(wǎng)最新版本的文檔并整合舊文檔重新進行全面總結、歸納。 本文主要對官網(wǎng) 快速開始 進行提煉總結,未涉及部分將在后續(xù)章節(jié)陸續(xù)補充完善。 go-zero 的 goctl 工具下載 驗證 goctl 的安裝結果: goctl 一鍵安裝 protoc 、 protoc-gen-go 、 protoc-gen-go-grp

    2024年02月09日
    瀏覽(19)
  • go-zero的服務發(fā)現(xiàn)源碼閱讀

    go-zero的服務發(fā)現(xiàn)源碼閱讀

    服務發(fā)現(xiàn)原理與grpc源碼解析_wangxiaoangg的博客-CSDN博客 ? go-zero rpc demo官方文檔:rpc編寫與調用 | go-zero 目錄 一 服務注冊 1.?創(chuàng)建rpc服務 2. 啟動rpc服務 3.?registerEtcd做了什么 4.?discov.NewPublisher 服務發(fā)布者 二 服務發(fā)現(xiàn) 1.定義注冊resolver 2.解析etcd地址創(chuàng)建鏈接 3.update方法 在看rp

    2024年02月06日
    瀏覽(16)
  • go-zero 開發(fā)之安裝 etcd

    本文只涉及 Linux 上的安裝。 二進制安裝 下載二進制安裝包 下載地址示例: 解壓二進制安裝包 刪除二進制安裝包 版本檢查 啟動 etcd 往 etcd 寫讀數(shù)據(jù) Docker 安裝 etcd 主要使用 Google 容器注冊表(gcr.io)下的 gcr.io/etcd-development/etcd 倉庫來存儲其容器鏡像。作為次要選項,它還使

    2024年02月04日
    瀏覽(18)
  • go-zero微服務實戰(zhàn)——服務構建

    go-zero微服務實戰(zhàn)——服務構建

    接上一節(jié)go-zero微服務實戰(zhàn)——基本環(huán)境搭建。搭建好了微服務的基本環(huán)境,開始構建整個微服務體系了,將其他服務也搭建起來。 order的目錄結構,如下 根目錄 api服務 rpc服務 自定義邏輯層logic 自定義參數(shù)層models 自定義工具層util api服務和rpc服務都是基于goctl一鍵生成的,當

    2024年02月14日
    瀏覽(24)
  • 使用go-zero快速構建微服務

    使用go-zero快速構建微服務

    本文是對 使用go-zero快速構建微服務 [1] 的親手實踐 編寫API Gateway代碼 mkdir api goctl api -o api/bookstore.api cd api goctl api go -api bookstore.api -dir . go run bookstore.go -f etc/bookstore-api.yaml 啟動API Gateway服務,默認偵聽在8888端口 因為默認生成的 api/etc/bookstore-api.yml 為: 按提示下載,再次運行

    2024年02月13日
    瀏覽(25)
  • go-zero微服務實戰(zhàn)——基本環(huán)境搭建

    go-zero微服務實戰(zhàn)——基本環(huán)境搭建

    項目架構來源于go-zero實戰(zhàn):讓微服務Go起來。此對該項目有所刪減,相對簡單適合初學者。 省去了項目中每個服務占用獨立docker的過程,省略了docker-compose的構建過程。每個服務是一個獨立的程序不依賴與容器。 安裝goctl 安裝protoc 安裝go-zero 生成api標準api服務 生成rpc服務 生

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包