最近線上碰到一個線上的go程序Apollo報錯,請求apollo的時候超時,記錄一下錯誤的原因。
錯誤信息
Do Request fail![err:Get https://apollo.merak.xxx.com/notifications/v2?appId=xx.service-xx&cluster=default¬ifications=%5B%7B%22namespaceName%22%3A%22default.json%22%2C%22notificationId%22%xx%7D%5D: net/http: request canceled (Client.Timeout exceeded while awaiting headers)], request[], resp[<nil>]
Apollo 長輪詢機制
了解了一下,是因為Apollo的長輪詢機制導致的。
Apollo portal 更新配置后,進行輪詢的客戶端獲取更新通知,然后再調用接口獲取最新配置。不僅僅只有輪詢,還有定時更新(默認 5 分鐘一次)。目的就是讓客戶端能夠穩定的獲取到最新的配置。
根本原因
運維修改了相關服務的請求超時時間
解決辦法
將相關服務的超時時間修改,大于Apollo長輪詢時間。