我试图通过一个包含10个分区和10个吞吐量单位的事件中心发送1百万条小消息。
为此,我使用了javax.jms.MessageProducer。
我的问题是: 为什么我在Azure事件中心UI上看到错误,我怎么永远不会捕获ServerBusy(或任何其他)异常? 可能是java库已经处理了异常,包括可能重新发送消息,而不是将它暴露在外面吗?
而且,一般来说,Java生产者中ServerBusy错误处理的最佳实践是什么? (也许实现一个速率限制器,以便生产者每个TU总是发送不超过1000条消息?或者在捕获ServerBusy异常时实现重发策略?...)
答案 0 :(得分:0)
这两种选择都有利有弊。 1)当你使用速率限制时,在给定时间之前只会处理1000条消息,因此如果每个定义的时间有更多的请求,将会堆积请求,但是会保证没有人可以通过暴力攻击来发送消息。 / p>
2)重新发送策略的好处是,如果send方法失败,它将尝试重新发送。使用重新发送策略时,请确保提及重新发送的尝试次数,否则如果服务器已关闭,它将继续重新发送,并且永远不会停止。
答案 1 :(得分:0)
根据我的经验,我认为有关Server Busy Errors
的问题是事件中心服务的内部错误,它不是由Java客户端引起的,并且不会返回任何错误信号或消息以在Java客户端中导致相关的异常。
此外,请参阅文档Quotas and Limits
(https://azure.microsoft.com/en-us/documentation/articles/service-bus-quotas/)并检查消息或其他内容是否超出这些配额和&限制。