转发https://github.com/Azure/azure-sdk-for-python/issues/6731#issuecomment-1028393257
我正在 ServiceBusClient 上测试重试参数,尚不清楚它们是否/如何工作。
我做错了什么吗?我不明白重试是如何工作的吗?在下面,我预计该消息将在 30 秒内传递 3 次。相反,会传送 10 次,每次传送之间的间隔约为 150 毫秒。
with ServiceBusClient.from_connection_string(
CONNECTION_STRING, retry_total=2, retry_backoff_factor=10
) as client:
with client.get_subscription_receiver(
topic_name="test", subscription_name="andrew_test"
) as receiver:
for message in receiver:
logger.debug(
f"message {message.sequence_number}, delivery count {message.delivery_count}"
)
receiver.abandon_message(message)
针对一条消息运行上述结果 -
11:08:02.721 DEBUG message 40719, delivery count 0
11:08:02.875 DEBUG message 40719, delivery count 1
11:08:03.029 DEBUG message 40719, delivery count 2
11:08:03.183 DEBUG message 40719, delivery count 3
11:08:03.339 DEBUG message 40719, delivery count 4
11:08:03.644 DEBUG message 40719, delivery count 5
11:08:03.799 DEBUG message 40719, delivery count 6
11:08:03.955 DEBUG message 40719, delivery count 7
11:08:04.111 DEBUG message 40719, delivery count 8
11:08:04.269 DEBUG message 40719, delivery count 9
最佳答案
如何解释retry_backoff_factor
取决于retry_mode争论。默认情况下,它设置为“指数”,将 retry_mode="fixed"
设置为恒定的重试时间。
重试机制通常仅与 SDK 内发生的错误相关,例如连接超时。您可以通过设置retry_total=1、retry_backoff_factor=10、retry_mode="fixed"
、关闭互联网连接并启动代码来模拟此情况 - 之后应该会引发异常10秒。如果您现在将其更改为 retry_total=3, retry_backoff_factor=10, retry_mode="fixed"
,您将在 30 秒内看到异常,在该时间范围内客户端已尝试接收消息 3 次。
关于python - ServiceBus 重试逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70974772/