Middle+
Ինչպե՞ս կարգավորեցիք իդեմպոտենտությունը՝ որպեսզի կրկնվող հայտարարությունները չհասնեն:
sobes.tech AI
Պատասխան AI-ից
Իդեմպոտենտությունը կոնտեքստում հայտարարությունների մշակման սովորաբար հասնում է յուրահատուկ նույնականացման միջոցով յուրաքանչյուր հայտարարության և նրա առկայության ստուգմամբ նախքան մշակումը։ Go լեզվում դա կարելի է իրականացնել, օրինակ, օգտագործելով տվյալների բազա, որի մեջ կա միավորային ինդեքս այն դաշտի վրա, որը նույնականացնում է հայտարարությունը (օրինակ, ID կամ բովանդակության հեշը)։
Մոտեցման օրինակ՝
- Երբ ստանում ենք հայտարարությունը, մենք ստեղծում ենք յուրահատուկ բանալի (օրինակ, UUID կամ հեշ)։
- Փորձում ենք ավելացնել գրառում այդ բանալով տվյալների բազայում, որը ունի միավորային սահմանափակում։
- Եթե ավելացումը հաջող է, հայտարարությունը նոր է և մշակվում է։
- Եթե տեղի է ունենում միավորային խախտում, դա նշանակում է, որ հայտարարությունը արդեն մշակվել է և այն անտեսում ենք։
Go կոդի օրինակ՝ օգտագործելով տվյալների բազա՝
func processAd(ad Ad) error {
// ad.ID — յուրահատուկ հայտարարության նույնականիչ
err := db.InsertAd(ad)
if err != nil {
if isUniqueViolation(err) {
// Հայտարարությունը արդեն մշակվել է
return nil
}
return err
}
// Հայտարարության մշակումը
return handleAd(ad)
}
Կարող եք նաև օգտագործել cache (օրինակ՝ Redis)՝ որոշ ժամանակով սահմանելով բանալին, որպեսզի արագորեն մերժեք կրկնվող հարցումները։