Go语言 在Microsoft Graph API SDK中处理重试和限制

nbysray5  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(115)

当前的Microsoft graph SDK for Go没有为图形客户端指定任何参数来利用节流或重试,或者任何用于确定默认行为的参数。
如果您使用自定义REST客户端,则可以根据响应代码完成此操作,方法是查看错误代码429和来自响应头的回退时间,而不是使用sdk。
正在寻找一个解决方案,以便graph sdk在Retry-After标头内进行内部重试
文档中也没有提到任何用于限制句柄https://pkg.go.dev/github.com/microsoftgraph/msgraph-sdk-go-core的自定义适配器

yfjy0ee7

yfjy0ee71#

好了,现在我能够弄清楚如何在Go中将重试处理程序作为中间件添加到图形客户端。下面是一段代码:

// Generate credentials
cred, err := azidentity.NewClientSecretCredential(sharepointTenantId, clientId, clientSecret, nil)

if err != nil {
    return err
}

defaultClientOptions := msgraphsdk.GetDefaultClientOptions()
defaultMiddleWare := msgraphgocore.GetDefaultMiddlewaresWithOptions(&defaultClientOptions)

// Custom middleware function to retry only on ratelimit error (Code: 429) can be customized to retry on more error codes)

graphRetryOptions := nethttplibrary.RetryHandlerOptions{MaxRetries: 5, ShouldRetry: func(delay time.Duration, executionCount int, request *http.Request, response *http.Response) bool {
    if response.StatusCode == 429 {
        if v := response.Header["Retry-After"]; len(v) > 0 {
            // Logic to add sleep based on retry after recommended time
            return true
        }
    }
    return false
}}

retryMiddleware := nethttplibrary.NewRetryHandlerWithOptions(graphRetryOptions)
defaultMiddleWare = append(defaultMiddleWare, retryMiddleware)

graphOpts := &msgraphgocore.GraphClientOptions{GraphServiceVersion: DefaultGraphScope, GraphServiceLibraryVersion: "1.0.0"}

graphHttpClient := msgraphgocore.GetDefaultClient(graphOpts, defaultMiddleWare...)

authProvider, _ := authentication.NewAzureIdentityAuthenticationProviderWithScopes(cred, []string{".default"})

adapter, err := msgraphsdk.NewGraphRequestAdapterWithParseNodeFactoryAndSerializationWriterFactoryAndHttpClient(authProvider, nil, serialization.DefaultSerializationWriterFactoryInstance, graphHttpClient)

if err != nil {
    return err
}

// your graph client
client := msgraphsdk.NewGraphServiceClient(adapter)

相关问题