BŽŪP principai
CAP principas, taip pat žinomas kaip CAP teorema, reiškia paskirstytos sistemos nuoseklumą, prieinamumą ir pasiskirstymo toleranciją. BŽŪP principas teigia, kad šiais trimis elementais vienu metu galima pasiekti tik du taškus.Neįmanoma paimti visų trijų vienu metu。
BŽŪP principo esmė yra arba AP, CP arba AC, tačiau BŽŪP nėra. Jei paskirstytoje sistemoje nėra duomenų kopijos, sistema turi atitikti stipraus nuoseklumo sąlygą, nes yra tik unikalūs duomenys, nebus duomenų neatitikimo, šiuo metu yra du elementai C ir P, tačiau jei sistemoje yra tinklo skaidinio sąlyga arba prastova, tai neišvengiamai lems, kad kai kurie duomenys bus nepasiekiami, o prieinamumo sąlyga negali būti įvykdyta, tai yra, šiuo atveju gaunama CP sistema, betBŽŪP negali būti tenkinama tuo pačiu metu。
Peržiūra:
DotNetCore.CAP
CAP yra renginių magistralė ir diegimas paskirstytoje sistemoje (SOA, MicroService).Galutinė konsistencija(Distributed Transactions) yra atvirojo kodo C# biblioteka, kuri yra lengva, naši ir paprasta naudoti.
"GitHub" adresas:Hipersaito prisijungimas matomas.
"Dotnet CAP" turi visas "Event Bus" funkcijas, o CAP suteikia supaprastintą būdą tvarkyti publikavimą / prenumeratą "EventBus".
"MediatR" yra apdorojama pranešimų prenumeratos ir publikavimo sistema, teikianti siuntimo metodą, skirtą publikuoti vienai apdorojimo programai, ir publikavimo metodą, skirtą publikuoti kelioms apdorojimo programoms, kurį labai patogu naudoti. Šiuo metu .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 ir kitos versijos, kurios gali būti naudojamos įvairiose platformose.
"ASP.NET Core" naudoja "MediatR" tarpinį modelį
https://www.itsvse.com/thread-9272-1-1.html Architektūros peržiūra
CAP palaiko pranešimų eiles, tokias kaip Kafka, RabbitMQ, AzureServiceBus, AmazonSQS ir kt., o CAP teikia Sql Server, MySql, PostgreSQL ir MongoDB plėtinius kaip duomenų bazės saugyklą.
Šiame straipsnyje "RabbitMQ" ir "SQL Server" naudojami kaip pranešimų eilės ir saugykla.
Įdiekite RabbitMQ
Konkrečių diegimo pamokų žr.:
Paskyros pridėjimas taip pat praleidžiamas, žr.:
Aš pats pridėjau bandomąją paskyrą ir apribojau virtualius pagrindinius kompiuterius, kaip parodyta žemiau:
Priešingu atveju klaida bus tokia:
ACCESS_REFUSED - Prisijungimas buvo atmestas naudojant autentifikavimo mechanizmą PLAIN. Daugiau informacijos rasite brokerio žurnalo faile.
Nė vienas iš nurodytų galinių punktų nebuvo pasiekiamas
.NET Core integruoja CAP
Pirmiausia sukurkite naują "ASP.NET Core" projektą, kuris yra ir siuntėjas, ir gavėjas. Norėdami įdiegti paketą, naudokite komandą nuget taip:
Paleisdami sukonfigūruokite paslaugos metodą ConfigureServices taip:
Galite apsilankyti svetainėje / cap adresu, kad peržiūrėtumėte prietaisų skydelį, kaip parodyta toliau:
Duomenų patvarumas: viršutinė riba busAutomatinis kūrimas"Publikuota" ir "Gauta" yra dvi vietinės duomenų bazės lentelės
SUKURTI LENTELĘ [cap]. [Publikuota] ( [Id] [bigint] NE NULINIS, [Versija] [nvarchar] (20) NĖRA NIEKINIS, [Vardas] [nvarchar] (200) NĖRA NIEKINIS, [Turinys] [nvarchar] (maks.) NULL, [Pakartojimai] [int] NE NULINIS, [Papildyta] [datetime2] (7) NE NIEKINIS, [Pasibaigia] [datetime2] (7) NIEKINIS, [StatusName] [nvarchar] (50) NĖRA NIEKINIS, APRIBOJIMAS [PK_cap. Publikuota] PIRMINIS RAKTAS SUGRUPUOTAS
( [ID] ASC )SU (PAD_INDEX = IŠJUNGTA, STATISTICS_NORECOMPUTE = IŠJUNGTA, IGNORE_DUP_KEY = IŠJUNGTA, ALLOW_ROW_LOCKS = ĮJUNGTA, ALLOW_PAGE_LOCKS = ĮJUNGTA) ĮJUNGTA [PIRMINĖ] ) DĖL [PIRMINĖS] TEXTIMAGE_ON [PIRMINĖS] EITI SUKURTI LENTELĘ [cap]. [Gauta] ( [Id] [bigint] NE NULINIS, [Versija] [nvarchar] (20) NĖRA NIEKINIS, [Vardas] [nvarchar] (200) NĖRA NIEKINIS, [Grupė] [nvarchar] (200) NULL, [Turinys] [nvarchar] (maks.) NULL, [Pakartojimai] [int] NE NULINIS, [Papildyta] [datetime2] (7) NE NIEKINIS, [Pasibaigia] [datetime2] (7) NIEKINIS, [StatusName] [nvarchar] (50) NĖRA NIEKINIS, APRIBOJIMAS [PK_cap. Gauta] PIRMINIS RAKTAS SUGRUPUOTAS
( [ID] ASC )SU (PAD_INDEX = IŠJUNGTA, STATISTICS_NORECOMPUTE = IŠJUNGTA, IGNORE_DUP_KEY = IŠJUNGTA, ALLOW_ROW_LOCKS = ĮJUNGTA, ALLOW_PAGE_LOCKS = ĮJUNGTA) ĮJUNGTA [PIRMINĖ] ) DĖL [PIRMINĖS] TEXTIMAGE_ON [PIRMINĖS] EITI
"HomeController" valdiklio metodas yra toks:
Kai vartotojas sėkmingai užsiregistruos, bus išsiųsti 3 pranešimai skirtingomis temomis, o tada abonentas juos suvartos.
Pradėjus taikyti BŽŪP, bus sukurta numatytoji vartotojų grupė, jei keli tos pačios vartotojų grupės vartotojai vartoja tą pačią teminę žinutę,Bus įvykdytas tik vienas vartotojas。 Priešingai,Jei visi vartotojai priklauso skirtingoms vartotojų grupėms, visi vartotojai yra。
Kuriant naują .NET Core konsolės projektą, kaip abonentui (vartotojui) arba nurodant paketą, prietaisų skydelio galima nepaisyti.
Jei jis yra duomenų valdytoje, pridėkite [CapSubscribe("")] tiesiogiai, kad užsiprenumeruotumėte atitinkamus pranešimus.
Jei jūsų metodo nėra valdiklyje, klasė, kurią prenumeruojate, turi paveldėti ICapSubscribe ir pridėti žymą [CapSubscribe("")]. Kodas yra toks:
Atidarykite prenumeratos klientą ir pabandykite pasiekti http://localhost:28116/Home/UserRegister siųsti pranešimus, poveikis yra toks:
Suveikia ir konsolė, ir valdiklio imtuvas, kaip parodyta paveikslėlyje žemiau:
Pabandykite rankiniu būdu mesti išimtį pranešimo gavimo būdu, kodas yra toks:
BŽŪP automatiškai pakartos metodą,Pagal numatytuosius nustatymus pakartotinių bandymų skaičius po nesėkmės yra 50, o pakartotinių bandymų intervalas po nesėkmės yra 60 sekundžių, kaip parodyta toliau pateiktame paveikslėlyje:
Sistema negali būti 100% tikra, kad pranešimas vykdomas tik vieną kartąTodėl kai kuriuose pagrindiniuose scenarijuose pranešimo pusėje atkreipiamas dėmesys į verslo dublikatų šalinimą metodo diegimo procese.
Galiausiai pridėkite šaltinio kodą:
Turistai, jei norite pamatyti paslėptą šio įrašo turinį, prašome Atsakyti
|