取得 Google Cloud Storage 中物件的服務 URL

取得 Google Cloud Storage 中物件的服務 URL

我們有一個Golang在 AppEngine 上運行的應用程序,它使用以下套件:

"cloud.google.com/go/storage"
apiStorage "google.golang.org/api/storage/v1"
"google.golang.org/appengine"
"google.golang.org/appengine/blobstore"
"google.golang.org/appengine/image"

一般工作流程

  • 我們signed URL從 golang 應用程式中取得一個檔案上傳到 Google Cloud Storage
  • 我們PUT向該 URL 發送請求以將文件上傳到 Google Cloud Storage 儲存桶
  • 收到該請求的回應後,我們使用以下程式碼PUT檢索:serving URL

程式碼

ctx := appengine.NewContext(r)
objectName := fmt.Sprintf("%s", "/gs/"+bucketID+"/"+objectID)
key, err := blobstore.BlobKeyForFile(ctx, objectName)
client, _ := storage.NewClient(ctx)
_ , error := client.Bucket(bucketID).Object(objectID).Attrs(ctx)
res, err := image.ServingURL(ctx,appengine.BlobKey(key),&image.ServingURLOptions{Secure: true})

我們遇到的問題是,這在 99% 的情況下運作良好(我們在 API 用戶端中得到了一個服務 URL),但在某些情況下我們會得到一個錯誤API Error 8 - OBJECT_NOT_FOUND(如果我們等待更長時間,這種情況發生的頻率就會降低)請求寫入PUT和請求讀取GET到服務 URL 端點之間)。

這是服務 URL 所期望的嗎?我們是否可以為此採取任何解決方法/緩解措施?

答案1

您使用的程式碼是正確的,但是當您呼叫 API 時,它不時失敗是正常的,就像發生在您身上一樣。

你能做的就是改進你的程式碼,將你的 API 呼叫包裝成指數形式退避演算法這是一種錯誤處理演算法。使用此演算法,在重試失敗的請求之前,請求之間會存在時間延遲,每次請求失敗都會增加時間延遲。

還找到了不一樣的方法取得服務基址 URL,用戶說它有效,但我還沒有嘗試過,也許它對你有用。

相關內容