1 回答
TA贡献1982条经验 获得超2个赞
正如评论中所讨论的,这种情况下的问题很可能是由于网络瞬态错误造成的,这在分布式环境中很正常。大多数情况下,暂时性错误可以通过重试来恢复。不幸的是,在v0.50.x的旧版 python 服务总线 SDK 中,没有开箱即用的重试功能。最新的 V7 SDK中添加了指数回退重试(目前处于预览版,很快将成为 GA)。具体可以参考v0.50到v7的迁移指南。下面是使用 V7 SDK 的接收器代码示例(注意:同步变体,还有异步支持,您可以在广泛的示例列表中查看)。
V7 SDK 现在允许您为客户端传递重试参数。虽然默认值一般来说应该足够了。
retry_total
:允许的重试总数。优先于其他计数。默认值为 10。
retry_backoff_factor
:在第二次尝试之后在尝试之间应用的退避因子(大多数错误可以通过第二次尝试立即解决,没有延迟)。在固定模式下,重试策略将始终休眠 {backoff Factor}。在“指数”模式下,重试策略将休眠:{退避因子} * (2 ** ({总重试次数} - 1)) 秒。如果 backoff_factor 为 0.1,则重试将在重试之间休眠 [0.0s, 0.2s, 0.4s, ...]。默认值为 0.8。
retry_backoff_max
:最大回退时间。默认值为 120(以秒为单位)。
servicebus_client = ServiceBusClient.from_connection_string(conn_str=CONNECTION_STR, retry_total=10, retry_backoff_factor=1, retry_backoff_max=30)
with servicebus_client:
receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME)
with receiver:
received_msgs = receiver.receive_messages(max_message_count=10, max_wait_time=5)
for msg in received_msgs:
print(str(msg))
msg.complete()
添加回答
举报