Cilat janë radhët e mesazheve dhe si i përdorni ato?


Radhët e mesazheve përdoren për të transmetuar mesazhe të shkurtra ndërmjet shërbimeve të shkëputura. Ato mund të përdoren për komunikim në mikroshërbime, si dhe sisteme të shpërndara që duhet të mbahen të sinkronizuara. Ne do të diskutojmë bazat, si dhe mënyrën e përdorimit të tyre me AWS SQS.

Si funksionojnë radhët e mesazheve?

Ju mund të mendoni për radhët e mesazheve si ngjitës midis shërbimeve të shkëputura. Ato ofrojnë një lidhje midis prodhuesve të mesazheve dhe konsumatorëve të mesazheve.

Për shembull, le të themi se keni një aplikacion në internet të vendosur në shumë serverë të ndryshëm pas një balancuesi të ngarkesës. Ju keni përdorues që ngarkojnë imazhe dhe dëshironi të kryeni disa përpunime në imazhet në një server tjetër. Mund të provoni që secili server të dërgojë manualisht një kërkesë POST në serverin përpunues, i cili do të funksiononte, por çka nëse ai server nuk e merrte kërkesën, ose prodhuesi donte të konfirmonte që kërkesa ishte trajtuar? Bëhet e vështirë për të shkallëzuar një sistem të tillë, veçanërisht kur ju duhet të merreni me mijëra mesazhe në sekondë.

Me një radhë mesazhesh, të gjithë ata serverë ueb mund t'i dërgoni mesazhe në një radhë qendrore. Pastaj, serveri përpunues do të kontrollojë rregullisht radhën dhe do të përpunojë çdo mesazh. Pas përfundimit të përpunimit, konsumatori fshin mesazhin nga radha, duke u siguruar që ai të mos përpunohet dy herë nga një konsumator tjetër. Nëse ju intereson porosia, mund të përdorni një radhë First-In, First-out, ku mesazhet duhet të përpunohen saktësisht sipas radhës që janë marrë.

Mesazhet mund të përmbajnë gjithçka që dëshironi, megjithëse në përgjithësi ato duhet të mbahen mjaft të vogla. AWS SQS ka një madhësi maksimale të mesazhit prej 256 kb, që është më se e mjaftueshme për pak JSON që përmban disa meta të dhëna. Nëse keni nevojë të ruani objekte të mëdha, duhet t'i ngarkoni ato në një shërbim ruajtjeje si S3, pastaj referojuni URI-së në mesazh.

Radhët kanë edhe shumë përfitime të tjera. Ato mundësojnë tepricë përmes qëndrueshmërisë së mesazhit; mesazhet e vendosura në radhë duhet të fshihen manualisht, kështu që mund të siguroheni që edhe nëse vonohet, ato të përpunohen gjithmonë në një moment. Nëse ndonjë gjë dështon, mesazhet mund të përpunohen pasi sistemi të kthehet në linjë.

Radhët mund të përdoren gjithashtu për të përpunuar artikujt në grup. Në vend që të dërgoni 100 kërkesa për bazën e të dhënave, ju mund të përpunoni të gjithë radhën në të njëjtën kohë dhe të dërgoni një kërkesë të madhe, e cila shpesh është më e efektshme.

Plus, shumica e shërbimeve të radhës si AWS SQS do të kenë mjete të integruara monitorimi, kështu që ju mund të mbani gjurmët se sa mesazhe po dërgohen me kalimin e kohës.

Fillimi me AWS SQS

Vendosja e një radhe SQS është mjaft e thjeshtë. Shkoni te tastiera SQS dhe krijoni një radhë të re:

Ju keni dy opsione në dispozicion: Standard, i cili siguron që mesazhet të dërgohen të paktën një herë dhe bën punën e tij më të mirë për t'i porositur siç duhet; dhe First-in, First-out, të cilat sigurojnë që mesazhet të përpunohen vetëm një herë dhe sipas rendit të saktë. Megjithatë, të dyja kanë përfitimet e tyre, pasi FIFO në përgjithësi është më pak performuese për ngarkesat e punës që gjenerojnë mijëra mesazhe në sekondë.

Më tej janë cilësimet për mënyrën se si trajtohen mesazhet. Përfundimi i kohës së dukshmërisë përcakton kohëzgjatjen që i duhet një mesazhi për të përpunuar me sukses. Kur konsumatori kërkon SQS për përditësime të mesazheve, ai do ta heqë atë mesazh nga radha përkohësisht për t'i lejuar konsumatorit kohë për ta përpunuar dhe fshirë atë manualisht. Kjo ju lejon të zvogëloni dhe të keni shumë konsumatorë, megjithëse nëse dëshironi t'i dërgoni një mesazh secilit konsumator, do t'ju duhet të krijoni radhë të shumta.

Periudha e ruajtjes së mesazheve i referohet se sa kohë do të qëndrojnë në radhë mesazhet që nuk përpunohen. Vonesa e dorëzimit mund të përdoret për të vonuar dërgimin e mesazheve te prodhuesit dhe marrja e kohës së pritjes së mesazhit mund të përdoret për të mundësuar një sondazh të gjatë, duke reduktuar numrin e marrjes së mesazheve boshe, gjë që mund të zvogëlojë kostot në sistemet me performancë të lartë.

Së fundi, politika e aksesit mund të përdoret për të mbyllur këtë radhë për përdoruesit ose rolet specifike të IAM.

Për të përdorur radhën, mund t'i dërgoni mesazhe SQS në mënyrë programore duke përdorur SDK-të e klientit, ose ta përdorni atë nga API AWS. Ne do ta shfaqim atë me kod pasi është më e lehtë për t'u kuptuar.

Në .NET SDK, mund të krijoni një AmazonSQSClient të ri duke i kaluar URL-në e shërbimit, e cila përfaqëson rajonin në të cilin ndodhet radha juaj.

Më pas, mund të ndërtoni SendMessageRequests të reja, t'i jepni trupin e mesazhit dhe URL-në e radhës dhe ta dërgoni atë me SQSClient.SendMessageAsync, i cili mund të jetë pret'ed dhe kthen një kod statusi HTTP.

Për të konsumuar mesazhe, mund të përdorni RecieveMessageAsync në një mënyrë të ngjashme. Kjo kthen një objekt që përmban një grup mesazhesh, të cilat mund t'i dërgoni në pjesën tjetër të kodit tuaj për përpunim.

Sigurisht, pasi të keni mbaruar, do t'ju duhet të pastroni veten. Për çdo mesazh që trajtoni, do t'ju duhet të dërgoni një DeleteMessageRequest në SQS për ta hequr atë nga radha. Ju do të dëshironi ta bëni këtë përpara përfundimit të kohës së mesazhit, ose përndryshe mund të përfundoni me mesazhe që përpunohen dy herë.