New We are sorting MAX channels into categories and territories. Read the news

πŸ§‘β€πŸ’» Go ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡƒΠΏΠ°Π²ΡˆΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ с ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ



πŸ‘ Π’ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ внСшниС сСрвисы, SSH-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ API пСриодичСски становятся нСдоступны. ВмСсто бСсконСчного Ρ†ΠΈΠΊΠ»Π° с фиксированным time.Sleep ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ с ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈ случайным разбросом β€” это сниТаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ систСму ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ запросы ΠΎΡ‚ мноТСства Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ².

πŸ“ Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ с ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ:



package main

import (
"context"
"fmt"
"math/rand"
"time"
)

func retry(ctx context.Context, attempts int, task func() error) error {
delay := 500 * time.Millisecond
maxDelay := 15 * time.Second

for i := 0; i < attempts; i++ {
if err := task(); err == nil {
return nil
} else if i == attempts-1 {
return fmt.Errorf("task failed after %d attempts: %w", attempts, err)
}

jitter := time.Duration(rand.Int63n(int64(delay/2 + 1)))
timer := time.NewTimer(delay + jitter)

select {
case <-ctx.Done():
timer.Stop()
return ctx.Err()
case <-timer.C:
}

delay *= 2
if delay > maxDelay {
delay = maxDelay
}
}

return nil
}

func main() {
ctx, cancel := context.WithTimeout(
context.Background(),
60*time.Second,
)
defer cancel()

err := retry(ctx, 6, func() error {
fmt.Println("ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ...")
return fmt.Errorf("service unavailable")
})

if err != nil {
fmt.Println("Ошибка:", err)
}
}

πŸ“Œ Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

β€’ Π­ΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ, Π° Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄Π΅Π» Π½Π΅ позволяСт Π΅ΠΌΡƒ расти бСсконСчно.
β€’ jitter добавляСт ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎΡΡ‚ΡŒ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ обращСния мноТСства ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².
β€’ context.Context позволяСт ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ истСчСнии ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°.

❗️ Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для CI/CD-Π°Π³Π΅Π½Ρ‚ΠΎΠ², Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², API-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ инфраструктуры. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ошибки: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСтСвыС сбои ΠΈ HTTP 503, Π½ΠΎ Π½Π΅ ошибки Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ.

tags: #go #автоматизация #Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

🧭 @recura_tech
Views: 280
Open in MAX Report an inaccuracy

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content β€” check the address before entering passwords or payment details.

Redirecting in 10 s

Go