Middle — Middle+
Xidmət və ya tətbiqin yumşaq dayandırılmasını necə həyata keçirirsiniz ki, cari vəziyyəti yadda saxlayasınız və məlumat itkisi olmadan bağlayasınız?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində xidmət və ya tətbiqi yumşaq şəkildə dayandırmaq üçün adətən əməliyyat sisteminin siqnallarını (məsələn, SIGINT, SIGTERM) və ləğv edilə bilən kontekst (context.Context) istifadə olunur. Bu, mövcud əməliyyatların düzgün şəkildə tamamlanmasına, vəziyyətin saxlanmasına və resursların azad edilməsinə imkan verir.
Nümunə:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Yumşaq dayandırma üçün siqnalın idarə olunması
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Dayandırma siqnalı alındı, bağlanma başlanır...")
cancel() // Konteksti ləğv et
}()
// Əsas məntiqi ləğv dəstəyi ilə işə sal
run(ctx)
}
func run(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Vəziyyəti saxla, resursları azad et
fmt.Println("Vəziyyəti saxla və bağla")
time.Sleep(2 * time.Second) // simulasiya
return
default:
// Əsas iş
fmt.Println("İşləyir...")
time.Sleep(1 * time.Second)
}
}
}
Bu yanaşma işi düzgün şəkildə sonlandırmağa, məlumat itkisini qarşısını almağa və əməliyyatları zorla dayandırmamağa imkan verir.