π¬ Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ deadline Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Go context?
πΈ
β’
β’
πΈΠ‘Π΅ΠΌΠ°Π½ΡΠΈΠΊΠ°
πΈΠ Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 4 ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΡ ΡΠ°Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ°ΠΌΠΎΠ»Π΅ΡΠ°. ΠΠΎΠ»ΡΡΠΈΠ² ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Π΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ.
πΈΠ Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΈΜΡ
πΈΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±ΡΠΎΠΊΠ΅ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Sarama Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Kafka).
πΈΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΈΜ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ
πΈΠ‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΈΜ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎ Π½Π΅ΠΈΜ ΡΠ΅ΡΠ΅Π· 4 ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π° Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΡΠΌΠΎΠ³Π»ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠ·ΠΎΠ²
πΈΠΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
πΈΠ ΡΠ΅ΠΌ ΡΠΌΡΡΠ» Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ
πΈ
deadline
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΈΜ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:β’
time.Duration
Ρ Π½Π°ΡΡΠΎΡΡΠ΅Π³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· 250 ΠΌΡ); β’
time.Time
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 2023-02-07 00:00:00 UTC).πΈΠ‘Π΅ΠΌΠ°Π½ΡΠΈΠΊΠ°
deadline
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°, Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΠΊΡΠ°ΠΈΜΠ½ΠΈΠΈΜ ΡΡΠΎΠΊ Π½Π°ΡΡΡΠΏΠΈΠ». Β«ΠΠ΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΡΒ» β ΡΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΡΠΎΡ ΡΠΈΠΏΠ° Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ΠΈΠ»ΠΈ Π³ΠΎΡΡΡΠΈΠ½Π° Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°.πΈΠ Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 4 ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΡ ΡΠ°Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ°ΠΌΠΎΠ»Π΅ΡΠ°. ΠΠΎΠ»ΡΡΠΈΠ² ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Π΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ.
πΈΠ Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΈΜΡ
publisher
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΈΜ Π² ΡΠ΅Π±Π΅ ΠΎΠ΄ΠΈΠ½Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΈΜ ΠΌΠ΅ΡΠΎΠ΄:type publisher interface {
Publish(ctx context.Context, position flight.Position) error
}
πΈΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±ΡΠΎΠΊΠ΅ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Sarama Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Kafka).
πΈΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΈΜ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ
Publish
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°? πΈΠ‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΈΜ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎ Π½Π΅ΠΈΜ ΡΠ΅ΡΠ΅Π· 4 ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π° Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΡΠΌΠΎΠ³Π»ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠ·ΠΎΠ²
Publish
:type publishHandler struct {
pub publisher
}
func (h publishHandler) publishPosition(position flight.Position) error {
ctx, cancel := context.WithTimeout(context.Background(), 4*time.Second)
defer cancel()
return h.pub.Publish(ctx, position)
}
πΈΠΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
context.WithTimeout
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ°ΠΈΜΠΌ-Π°ΡΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ publishPosition
Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΈΜ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΡΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ context.Background
. ΠΠ΅ΠΆΠ΄Ρ ΡΠ΅ΠΌ context.WithTimeout
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΈΜ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΌΠ΅Π½Ρ func()
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΌΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π°. ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π² ΠΌΠ΅ΡΠΎΠ΄ Publish
Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠΈΠ·ΠΎΠΈΜΡΠΈ Π½Π΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· 4 ΡΠ΅ΠΊΡΠ½Π΄Ρ.πΈΠ ΡΠ΅ΠΌ ΡΠΌΡΡΠ» Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ
cancel
ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ defer
? WithTimeout
ΡΠΎΠ·Π΄Π°Π΅Ρ Π³ΠΎΡΡΡΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Ρ
ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 4 ΡΠ΅ΠΊΡΠ½Π΄ ΠΈΠ»ΠΈ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° cancel
. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΡΠ·ΠΎΠ² cancel
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ defer
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ Π²ΡΡ
ΠΎΠ΄Π΅ ΠΈΠ· ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΈΜ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΌΠ΅Π½Π΅Π½, Π° ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π³ΠΎΡΡΡΠΈΠ½Π° ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°. ΠΡΠΎ ΠΌΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΌΡ Π½Π΅ ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ.