This commit is contained in:
23
main.go
23
main.go
@@ -68,25 +68,38 @@ func runGRPCClient(serverAddr string) {
|
||||
}()
|
||||
|
||||
reconnectInterval := 5 * time.Second
|
||||
const maxReconnectInterval = 60 * time.Second
|
||||
retryCount := 0
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
slog.Info("客户端已停止")
|
||||
slog.Info("客户端已停止", "total_retries", retryCount)
|
||||
return
|
||||
default:
|
||||
}
|
||||
|
||||
retryCount++
|
||||
currentInterval := reconnectInterval
|
||||
if retryCount > 1 {
|
||||
currentInterval = min(reconnectInterval*time.Duration(retryCount-1), maxReconnectInterval)
|
||||
}
|
||||
|
||||
slog.Info("正在连接服务器", "attempt", retryCount, "server", serverAddr)
|
||||
|
||||
c := grpcClient.NewClient(serverAddr, runnerID, version)
|
||||
handler := grpcClient.NewTaskHandler()
|
||||
c.SetHandler(handler)
|
||||
|
||||
if err := c.Connect(ctx); err != nil {
|
||||
slog.Warn("连接失败,稍后重试", "error", err, "retry_after", reconnectInterval)
|
||||
time.Sleep(reconnectInterval)
|
||||
slog.Warn("连接失败", "error", err, "attempt", retryCount, "retry_after", currentInterval)
|
||||
time.Sleep(currentInterval)
|
||||
continue
|
||||
}
|
||||
|
||||
slog.Info("连接成功", "attempt", retryCount)
|
||||
retryCount = 0
|
||||
|
||||
heartbeatCtx, heartbeatCancel := context.WithCancel(ctx)
|
||||
go c.HeartbeatLoop(heartbeatCtx, 30*time.Second)
|
||||
|
||||
@@ -99,9 +112,9 @@ func runGRPCClient(serverAddr string) {
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
slog.Warn("连接断开,稍后重连", "error", err, "retry_after", reconnectInterval)
|
||||
slog.Warn("连接断开", "error", err, "retry_after", reconnectInterval)
|
||||
} else {
|
||||
slog.Info("连接已关闭,稍后重连", "retry_after", reconnectInterval)
|
||||
slog.Info("连接已关闭")
|
||||
}
|
||||
time.Sleep(reconnectInterval)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user