如何从Azure Service总线接收批量邮件

时间:2016-04-19 14:27:51

标签: java azure sdk azureservicebus

在我的应用程序中,所有事件都存储在Azure服务总线队列中,另一个组件读取该队列并处理事件。我们正在使用Azure-servicebus java sdk版本0.9.2。

处理了几千个事件后,我们遇到了Service Bus错误。

Caused by: com.microsoft.windowsazure.exception.ServiceException: WRAP server returned error acquiring access_token
Response Body: ACS90055: The server has terminated the request (tenant exceeded rate limit). Please wait a few seconds and try again.

它减慢了我的申请。我也失去了很多活动。

如何传递此错误?

如何批量获取邮件,而不是为单个邮件获取单个呼叫?

我们是否对Azure服务总线Java SDK有批量接收支持?如果没有其他方式我们应该使用Azure Service总线跟踪Java应用程序。

如何提高租户的费率限制?

谢谢, ABHI

2 个答案:

答案 0 :(得分:0)

据我所知,由于底层的ACS服务和此处记录的限制 - https://msdn.microsoft.com/en-us/library/gg185909.aspx而发生该错误。在这种情况下,Service Bus就像“中间件”一样工作。

建议可以使用共享访问签名。你可以尝试说这是否有效? https://azure.microsoft.com/en-us/documentation/articles/service-bus-shared-access-signature-authentication/

关于“接收批次”,有https://msdn.microsoft.com/library/azure/microsoft.servicebus.messaging.subscriptionclient.receivebatch.aspx。对不起,这里没有现成的工作示例。但同样,我相信你所遇到的不是SB限制。

答案 1 :(得分:0)

正如@AlexBelotserkovskiy所说,文档"ACS Service Limitations"的“令牌请求率限制”部分解释了错误HTTP 429 "Too many requests" error with the ACS90055 error code的原因。

同时,以下内容提供了解决方法,请参阅下文。

  

如果重试不是在不断增加的时间间隔内分发,则累积的重试可能会加剧问题并延长令牌请求被拒绝的时间。如果由于命名空间超出令牌请求速率限制而导致重复出现ACS90055-HTTP 429错误,请考虑通过用多个较小的命名空间替换单个命名空间来重新分配工作负载。

所以我认为您可以尝试限制每秒请求服务总线的数量,或者创建更多服务总线命名空间以平衡工作负载。