第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何處理 Goroutine 中的錯(cuò)誤

如何處理 Goroutine 中的錯(cuò)誤

Go
一只甜甜圈 2023-07-31 15:13:29
我有一項(xiàng)用于將文件上傳到AWS S3 的服務(wù)。我試圖與 goroutine 一起使用而不上傳文件。如果我上傳沒有 goroutine 的文件,它應(yīng)該等到完成然后給出響應(yīng),如果我使用 goroutine 它將在后臺(tái)運(yùn)行并且更快地響應(yīng)客戶端。如果我使用 goroutine 上傳失敗怎么辦?然后那個(gè)文件沒有上傳到AWS S3?你能告訴我如何處理這個(gè)問題嗎?這是我上傳文件的功能func uploadToS3(s *session.Session, size int64, name string , buffer []byte)( string , error) {    tempFileName := "pictures/" + bson.NewObjectId().Hex() + "-" + filepath.Base(name)    _, err := s3.New(s).PutObject(&s3.PutObjectInput{        Bucket:             aws.String("myBucketNameHere"),        Key:                aws.String(tempFileName),        ACL:                aws.String("public-read"),        Body:               bytes.NewReader(buffer),        ContentLength:      aws.Int64(int64(size)),        ContentType:        aws.String(http.DetectContentType(buffer)),        ContentDisposition: aws.String("attachment"),        ServerSideEncryption: aws.String("AES256"),        StorageClass:       aws.String("INTELLIGENT_TIERING"),    })    if err != nil {        return "", err    }    return tempFileName, err}func UploadFile(db *gorm.DB) func(c *gin.Context) {    return func(c *gin.Context) {        file, err := c.FormFile("file")        f, err := file.Open()        if err != nil {            fmt.Println(err)        }        defer f.Close()        buffer := make([]byte, file.Size)        _, _ = f.Read(buffer)        s, err := session.NewSession(&aws.Config{            Region: aws.String("location here"),            Credentials: credentials.NewStaticCredentials(                    "id",                    "key",                    "",                ),        })        if err != nil {            fmt.Println(err)        }        go uploadToS3(s, file.Size, file.Filename, buffer)        c.JSON(200, fmt.Sprintf("Image uploaded successfully"))    }}我也在想,如果有很多請(qǐng)求每 5-10 分鐘上傳超過 10000 個(gè)以上的文件怎么辦?是否會(huì)因?yàn)檎?qǐng)求太多而無法上傳某些文件?
查看完整描述

3 回答

?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

問題是,當(dāng)使用 goroutine 時(shí),您會(huì)立即向客戶端返回成功消息。如果確實(shí)如此,則意味著您的 goroutine 需要能夠在上傳到 S3 時(shí)發(fā)生錯(cuò)誤時(shí)進(jìn)行恢復(fù)(不要丟失圖像)。因此,要么您處理這個(gè)問題,要么異步通知您的客戶端上傳失敗,以便客戶端可以重試。



查看完整回答
反對(duì) 回復(fù) 2023-07-31
?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊

這個(gè)問題太寬泛,無法單一回答。一般來說,有以下三種可能的方法:

  1. 等待您的 goroutine 完成以處理任何錯(cuò)誤。

  2. 確保你的 goroutine 可以處理(或者可能忽略)它們遇到的任何錯(cuò)誤,這樣返回錯(cuò)誤就無關(guān)緊要了。

  3. 讓你的 goroutine 記錄任何錯(cuò)誤,以便稍后處理,可能由人類處理,也可能由某些清理/重試函數(shù)處理。

哪種方法最好取決于具體情況。


查看完整回答
反對(duì) 回復(fù) 2023-07-31
?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊

對(duì)于任何異步任務(wù) - 例如在后臺(tái) go 例程中上傳文件 - 可以以將 a 返回chan error給調(diào)用者的方式編寫上傳函數(shù)。然后,調(diào)用者可以稍后通過讀取chan error.

但是,如果您接受上傳請(qǐng)求,我建議您創(chuàng)建一個(gè)工作上傳 go-routine,通過通道接受文件上傳。輸出“錯(cuò)誤”通道可以跟蹤成功/失敗。如果需要,上傳的錯(cuò)誤可以寫回原始上傳通道隊(duì)列(包括重試計(jì)數(shù)和重試最大值 - 因此有問題的有效負(fù)載不會(huì)永遠(yuǎn)循環(huán))。


查看完整回答
反對(duì) 回復(fù) 2023-07-31
  • 3 回答
  • 0 關(guān)注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)