登录
首页 >  Golang >  Go问答

处理重试和限制的微软图形API SDK

来源:stackoverflow

时间:2024-02-13 20:18:24 257浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《处理重试和限制的微软图形API SDK》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

当前的 microsoft graph SDK for Go 没有为图形客户端指定任何参数来利用限制或重试,也没有指定任何确定默认行为的参数。

如果您使用自定义 REST 客户端,可以通过查看响应标头中的错误代码 429 和退避时间(而不是使用 sdk)来完成此操作。

寻找解决方案,以便图形 SDK 在 Retry-After 标头内进行内部重试

该文档也没有提到任何用于节流手柄的自定义适配器 https://pkg.go.dev/github.com/microsoftgraph/msgraph-sdk-go-core


正确答案


好的,所以我能够弄清楚如何将重试处理程序作为中间件添加到 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)

sdk 内置了重试处理功能,因此无需重新实现它。默认中间件定义在kiota-http-go

retry logic也在那里。它处理 429、503 和 504。

今天关于《处理重试和限制的微软图形API SDK》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>