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()
添加回答
舉報