0

我正在尝试通过具有 10 个分区和 10 个吞吐量单元的事件中心发送 100 万条小消息。

为此,我正在使用 javax.jms.MessageProducer 。

我的问题是:虽然我确实在 Azure 事件中心 UI 上看到了错误,但为什么我从来没有捕获过 ServerBusy(或任何其他)异常?会不会是 java 库已经处理了异常,包括可能重新发送消息,而根本没有将其暴露在外面?

而且,一般来说,Java 生产者中 ServerBusy 错误处理的最佳实践是什么?(也许实现一个速率限制器,以便生产者每个 TU 发送的消息始终不超过 1000 条?或者在捕获 ServerBusy 异常时实现重新发送策略?...)

4

2 回答 2

0

两种选择都有优点和缺点。1)当您使用速率限制时,在给定时间之前只会处理 1000 条消息,因此如果在每个定义的时间内有更多请求,则会堆积请求,但会保证没有人可以通过暴力攻击来发送消息。

2) 重新发送策略的好处是,如果发送方法失败,它将尝试重新发送。使用重新发送策略时,请确保提及重新发送的尝试次数,否则如果服务器关闭,它将继续重新发送相同的内容,并且永远不会停止。

于 2015-12-21T16:41:16.333 回答
0

根据我的经验,我认为问题Server Busy Errors是事件中心服务的内部错误不是由 Java Client 引起的,并且没有返回任何错误信号或消息导致 Java Client 中的相关异常。

此外,请参阅文档Quotas and Limits( https://azure.microsoft.com/en-us/documentation/articles/service-bus-quotas/ ) 并检查邮件数量或其他内容是否超出这些配额和限制。

于 2015-12-30T14:05:06.910 回答