我在一个csv文件中有大约300万用户,我正在尝试使用使用PowerShell cmdlets(不是SDK)的图形API在Azure AD B2C中创建它们我想在azure广告b2c中创建它们,当时还需要记录b2c接受和拒绝的用户在PowerShell脚本中执行的步骤:
- 使用Import-CSV导入CSV
- 创建用于存储已接受用户的同步数组列表
- 创建用于存储拒绝用户的同步数组列表
- 在图形API中使用批处理创建批请求(每次20个)
- 使用for-each object -parallel - throttllimit 100为每个批调用图形API
- 对于每个请求,检查接受和错误的状态码,并将用户添加到相应的Arraylist中7.导出为CSV
但是当遵循这些步骤时,微软图形API抛出了节流问题
谁能指导我如何处理节流在这种情况下?或者是否有其他替代方法来实现这一目标?
请检查参考资料
处理节流的最佳实践
当您实现错误处理时,使用HTTP错误代码429或当批处理本身失败时使用(Failed Dependency)代码424来检测节流。失败的响应包含Retry-After
响应头。
使用Retry-After延迟回退请求是从节流中恢复的最快方法,因为Microsoft Graph在客户端被节流时继续记录资源使用情况。
Wait
Retry-After报头中指定的秒数。- 如果请求再次失败并返回429/424错误码,您仍然被限制。继续使用推荐的Retry-After延迟并重试请求
Retry
请求。如果它是由于批处理而进行的节流,则可以在最长的重试后重试新批处理中重试所有失败的请求价值。until it succeeds.
Graph-Powershell
,
foreach($Response in $BatchResponse.responses){
if([Int32]$Response.status -eq 201){
//...success logic
}else{
$rptObject.ErrorCount++
$rptObject.Errors += $Response.status
if([Int32]$Response.status -eq 429){
$rptObject.ThrottleCount++
if(!$TimeOutServed){
Write-Verbose($Response.Headers.'Retry-After')
Write-Verbose("Serving Throttling Timeout " + $Response.Headers.'Retry-After')
Start-sleep -Seconds $Response.Headers.'Retry-After'
$TimeOutServed = $true
}
}
引用:
- Microsoft Graph节流指南- Microsoft Graph | Microsoft Docs 微软的。net图形SDK自动处理速率限制吗?-栈溢出
- (github.com) microsoftgraph powershell问题