Билдирүү кезектери (киришүү)
Кызматтар бири-бирин күтпөй сүйлөшсүн, ал эми бирөө артта калганда система иштей берсин
- продюсер, брокер жана консьюмер ишти кантип бөлүштүргөнүн түшүндүрө;
- ажыратуу эмне берерин жана эмнеге турарын так айта;
- ырастоолорду колдонуп, бузулуу эч качан билдирүүнү унчукпай жоготпошун камсыздай;
- дайыма кулай берген билдирүүлөр үчүн кайталоолорду жана жеткирилбеген билдирүүлөрдүн кезегин долбоорлой;
- эң аз дегенде бир жолу жеткирүү жөнүндө жана консьюмерлер эмне үчүн идемпоттуу болушу керектиги жөнүндө ой жүгүртө;
- кезек качан туура курал экенин — жана качан ашыкча татаалдаштыруу экенин чечо аласыз.
1. Маселе: сизди күттүргөн түз чакыруу
Сиз мисалы колдонуучуну каттаган Express маршрутун кантип түзүүнү мурунтан билесиз. Каттоо ошондой эле миниатюра түзүшү, тосуп алуу катын жөнөтүшү жана аналитика кызматына жазуу жиберүиши керек дейли. Жөнөкөй версия клиентке жооп бергенге чейин мунун баарын ичинде аткарат:
app.post('/register', async (req, res) => {
const user = await db.createUser(req.body);
await generateThumbnail(user.avatarUrl); // 800 ms
await sendWelcomeEmail(user.email); // 1200 ms, сырткы SMTP
await analytics.track('signup', user.id); // 400 ms, үчүнчү тарап API
res.json({ ok: true }); // клиент ~2.4 с күттү
});
Бул жерде үч ката бар. Биринчиден, колдонуучу эки секунддан ашык спиннерге карап турат, бирок бул иштердин эч бири биз «аккаунт түзүлдү» деп айтканга чейин бүтүшү шарт эмес. Экинчиден, эгер почта провайдери жеткиликсиз болсо, бүт сурам кулайт — SMTPдин кыска мезгилдик үзгүлтүгү эми каттоону бузат. Үчүнчүдөн, сурамды иштетүүчү үч байланышы жок системага бекем ширелген; алардын ар биринин өзгөрүүсү каттоо жолун бузушу мүмкүн.
Билдирүү кезеги ишенимдүү фактыны («колдонуучу түзүлдү») жазып, андан кийинки ишти билдирүү катары өткөрүп берүүгө мүмкүндүк берет. Маршрут дароо жооп берет; жай, кулоого жакын иш башка жерде, өз графиги менен, өз кайталоо саясаты менен болот.