最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go實(shí)現(xiàn)超時控制的具體使用

 更新時間:2025年08月06日 10:09:28   作者:活椰拿銅  
本文主要介紹了Go中TimeoutControlWrapper實(shí)現(xiàn)超時控制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

應(yīng)用場景

交易、金融等事務(wù)系統(tǒng)往往會有各種下游,絕大多數(shù)時候我們會以同步方式進(jìn)行訪問,如調(diào)用RPC、HTTP等。 這些下游在通常延時相對穩(wěn)定,但有時可能出現(xiàn)極端的超大延時,這些極端case可能具備特定的業(yè)務(wù)特征,也有可能單純是硬件、網(wǎng)絡(luò)的問題造成,最終表現(xiàn)在系統(tǒng)P99或者P999的延時出現(xiàn)了突刺,如果是面向C端的場景,也會向用戶報出一些系統(tǒng)錯誤,造成用戶體驗(yàn)的下降。 一種簡易的解決方案是,針對關(guān)鍵的下游節(jié)點(diǎn)增加超時控制。在特定時間內(nèi),如果下游到期還未返回,不再暴露系統(tǒng)級錯誤,而是做特殊化處理,比如返回「處理中」?fàn)顟B(tài)。

Go實(shí)現(xiàn)方案

設(shè)計(jì)一個方法,使用閉包,傳入時間和執(zhí)行的任務(wù),如果任務(wù)執(zhí)行完未到時間,則直接返回,否則通知調(diào)用者超時。 為了保證代碼簡介和使用簡單,我們僅定義一個Wrapper方法,方法定義如下 func TimeoutControlWrapper(duration time.Duration, fn func()) (timeout bool)

官方包time有一個After方法,可以在指定時間內(nèi),返回一個channel,基于此來判斷是否超時。 另外,在Wrapper方法里異步化執(zhí)行目標(biāo)方法,執(zhí)行完成后寫入一個finish信號通知。 同時監(jiān)聽這兩個channel,判斷是否超時,代碼如下

func TimeoutControlWrapper(duration time.Duration, fn func()) (timeout bool) {
        finish := make(chan struct{})
        go func() {
                fn()
                finish <- struct{}{}
        }()

        select {
        case <-finish:
                return false
        case <-time.After(duration):
                return true
        }
}

結(jié)合場景,假設(shè)系統(tǒng)會調(diào)用一個支付系統(tǒng)的接口,接口本身延時不穩(wěn)定,因此我們套用TimeoutControlWrapper

func CallPaymentSystem(param PayParam) (payStatus PayStatus) {
    var payStatus PayStatus
    timeout := TimeoutControlWrapper(time.Second, func() {
        payStatus = PaymentSystemRPC.Pay(param)
    })
    if timeout {
        warn()    // WARN告警
        return  PROCESSING  // 返回處理中
    }
    return payStatus
}

延伸思考

上述通過一個簡單的Wrapper,來實(shí)現(xiàn)調(diào)用下游時的超時控制。但在引入的場景里,實(shí)現(xiàn)上是不嚴(yán)謹(jǐn)?shù)摹D呐虏辉黾映瑫r控制,我們也無法確認(rèn)請求是否真實(shí)到達(dá)了下游系統(tǒng),這本質(zhì)上是一個分布式事務(wù)的問題,需要我們設(shè)計(jì)更加健全的系統(tǒng)能力保證一致性,比如通過消息的方式、補(bǔ)償機(jī)制、增加對賬系統(tǒng)。

到此這篇關(guān)于Go實(shí)現(xiàn)超時控制的具體使用的文章就介紹到這了,更多相關(guān)Go 超時控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang時間及時間戳的獲取轉(zhuǎn)換

    golang時間及時間戳的獲取轉(zhuǎn)換

    本文主要介紹了golang時間及時間戳的獲取轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • go中slice淺拷貝和深拷貝的實(shí)現(xiàn)

    go中slice淺拷貝和深拷貝的實(shí)現(xiàn)

    本文主要介紹了go中slice淺拷貝和深拷貝的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Go語言編程實(shí)現(xiàn)支持六種級別的日志庫?

    Go語言編程實(shí)現(xiàn)支持六種級別的日志庫?

    這篇文章主要為大家介紹了使用Golang編寫一個支持六種級別的日志庫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Go語言遞歸函數(shù)的具體實(shí)現(xiàn)

    Go語言遞歸函數(shù)的具體實(shí)現(xiàn)

    本文主要介紹了Go語言遞歸函數(shù)的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 使用go自定義prometheus的exporter

    使用go自定義prometheus的exporter

    在prometheus中如果要監(jiān)控服務(wù)器和應(yīng)用的各種指標(biāo),需要用各種各樣的exporter服務(wù),這篇文章主要介紹了使用go自定義prometheus的exporter,需要的朋友可以參考下
    2023-03-03
  • Golang使用gvm進(jìn)行版本控制的安裝使用教程

    Golang使用gvm進(jìn)行版本控制的安裝使用教程

    這篇文章主要為大家介紹了Golang使用gvm進(jìn)行版本控制的安裝使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go語言變量初始化的實(shí)現(xiàn)示例

    Go語言變量初始化的實(shí)現(xiàn)示例

    在Go語言中,變量的初始化是編寫程序時經(jīng)常遇到的重要操作之一,本文主要介紹了Go語言變量初始化的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • Golang設(shè)計(jì)模式之單例模式詳細(xì)講解

    Golang設(shè)計(jì)模式之單例模式詳細(xì)講解

    單例模式很容易記住。就像名稱一樣,它只能提供對象的單一實(shí)例,保證一個類只有一個實(shí)例,并提供一個全局訪問該實(shí)例的方法。本文就來聊聊Go語言中的單例模式,感興趣的小伙伴可以了解一下
    2023-01-01
  • go swagger生成接口文檔使用教程

    go swagger生成接口文檔使用教程

    這篇文章主要為大家介紹了go swagger生成接口文檔使用教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語言中的自定義函數(shù)類型的實(shí)現(xiàn)

    Go語言中的自定義函數(shù)類型的實(shí)現(xiàn)

    在Go語言中,函數(shù)類型是一種將函數(shù)作為值的數(shù)據(jù)類型,本文主要介紹了Go語言中的自定義函數(shù)類型,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09

最新評論

新乐市| 鞍山市| 新津县| 迁安市| 长治县| 新泰市| 富民县| 嘉荫县| 柘城县| 贺州市| 隆德县| 北辰区| 岐山县| 永济市| 太原市| 健康| 西乌珠穆沁旗| 漳平市| 平顶山市| 龙州县| 荔波县| 松潘县| 惠水县| 丹江口市| 永川市| 汕尾市| 阳江市| 密山市| 专栏| 灵寿县| 万源市| 孝感市| 东宁县| 察雅县| 晋江市| 汉沽区| 荣成市| 万山特区| 松江区| 塔城市| 阳江市|