Principiile CAP
Principiul CAP, cunoscut și sub denumirea de teorema CAP, se referă la consistență, disponibilitate și toleranța la partiții într-un sistem distribuit. Principiul CAP afirmă că aceste trei elemente pot obține doar două puncte simultan.Este imposibil să le iei pe toate trei simultan。
Esența principiului CAP este fie AP, CP sau AC, dar nu există CAP. Dacă nu există o copie a datelor într-un sistem distribuit, atunci sistemul trebuie să îndeplinească condiția de consistență puternică, deoarece există doar o dată unică, nu va exista inconsistență de date; în acest moment, cele două elemente C și P sunt prezente, dar dacă sistemul are o condiție de partiție a rețelei sau o perioadă de nefuncționare, inevitabil va duce la inaccesibilitatea unor date, iar condiția de disponibilitate nu poate fi îndeplinită, adică sistemul CP este obținut în acest caz, darCAP nu poate fi satisfăcută în același timp。
Recenzie:
DotNetCore.CAP
CAP este un bus de evenimente și o implementare într-un sistem distribuit (SOA, MicroService).Consistența finală(Distributed Transactions) este o bibliotecă C# open-source, ușoară, performantă și ușor de folosit.
Adresă GitHub:Autentificarea cu hyperlink este vizibilă.
Dotnet CAP are toate funcțiile Event Bus, iar CAP oferă o modalitate mai simplificată de a gestiona publicarea/abonarea în EventBus.
MediatR este un cadru de abonare și publicare a mesajelor în proces care oferă metoda Send pentru publicarea către un singur handler și metoda Publish pentru publicarea către mai mulți handleri, ceea ce este foarte convenabil de folosit. În prezent, .NET Framework 4.5, . NET Stardand1.3、. NET Stardand 2.0 și alte versiuni, care pot fi folosite pe mai multe platforme.
ASP.NET Core folosește modelul intermediar MediatR
https://www.itsvse.com/thread-9272-1-1.html Previzualizare arhitecturală
CAP suportă cozi de mesaje precum Kafka, RabbitMQ, AzureServiceBus, AmazonSQS etc., iar CAP oferă extensii pentru Sql Server, MySql, PostgreSQL și MongoDB ca stocare a bazei de date.
Acest articol folosește RabbitMQ și SQL Server ca cozi de mesaje și stocare.
Instalează RabbitMQ
Pentru tutoriale specifice de instalare, vă rugăm să consultați:
Adăugarea unui cont este de asemenea omisă, vă rugăm să consultați:
Am adăugat contul de test și am limitat Virtual Hosts, așa cum se arată mai jos:
În caz contrar, eroarea va fi următoarea:
ACCESS_REFUSED - Autentificarea a fost refuzată folosind mecanismul de autentificare PLAIN. Pentru detalii, consultați fișierul de jurnal al brokerilor.
Niciunul dintre punctele finale specificate nu era accesibil
.NET Core integrează CAP
În primul rând, creează un nou proiect ASP.NET Core care să fie atât expeditorul, cât și receptorul. Folosește comanda nuget pentru a instala pachetul astfel:
La pornire, configurați metoda de serviciu ConfigureServices astfel:
Puteți vizita site-ul web / adresa cap pentru a vedea tabloul de bord, așa cum este prezentat mai jos:
Persistența datelor: Limita vaCrearea automată"Published" și "Received" sunt două tabele locale de baze de date
CREATE TABLE [cap]. [Publicat] ( [ID] [bigint] NU NUL, [Versiune] [nvarchar] (20) NU NUL, [Nume] [nvarchar] (200) NU NUL, [Conținut] [nvarchar] (max) NULL, [Întoarce] [int] NU NUL, [Adăugat] [datetime2] (7) NU NUL, [Expiră] [datetime2] (7) NUL, [NumeStatus] [nvarchar] (50) NU NUL, CONSTRÂNGERE [PK_cap. [Publicat] CHEIE PRIMARĂ CLUSTERATĂ
( [Id] ASC )CU (PAD_INDEX = OPRIT, STATISTICS_NORECOMPUTE = OPRIT, IGNORE_DUP_KEY = OPRIT, ALLOW_ROW_LOCKS = PORNIT, ALLOW_PAGE_LOCKS = PORNIT) PORNIT [PRIMAR] ) PE [PRIMAR] TEXTIMAGE_ON [PRIMAR] DU-TE CREATE TABLE [cap]. [Recepționat] ( [ID] [bigint] NU NUL, [Versiune] [nvarchar] (20) NU NUL, [Nume] [nvarchar] (200) NU NUL, [Grup] [nvarchar] (200) NULL, [Conținut] [nvarchar] (max) NULL, [Întoarce] [int] NU NUL, [Adăugat] [datetime2] (7) NU NUL, [Expiră] [datetime2] (7) NUL, [NumeStatus] [nvarchar] (50) NU NUL, CONSTRÂNGERE [PK_cap. Recepționat] CHEIE PRIMARĂ CLUSTERATĂ
( [Id] ASC )CU (PAD_INDEX = OPRIT, STATISTICS_NORECOMPUTE = OPRIT, IGNORE_DUP_KEY = OPRIT, ALLOW_ROW_LOCKS = PORNIT, ALLOW_PAGE_LOCKS = PORNIT) PORNIT [PRIMAR] ) PE [PRIMAR] TEXTIMAGE_ON [PRIMAR] DU-TE
Metoda controlerului HomeController este următoarea:
Când utilizatorul se înregistrează cu succes, vor fi trimise 3 mesaje cu subiecte diferite, iar apoi abonatul le va consuma.
Când începe CAP, va crea un grup implicit de consumatori, dacă mai mulți consumatori din același grup consumă același mesaj tematic,Doar un singur consumator va fi executat。 Dimpotrivă,Dacă toți consumatorii sunt în grupuri diferite de consumatori, toți consumatorii sunt executați。
Crearea unui nou proiect de consolă .NET Core, ca abonat (consumator) sau referința la pachet, poate fi ignorată.
Dacă este în Controller, adăugați [CapSubscribe("")] direct pentru a vă abona la mesajele relevante.
Dacă metoda ta nu este în Controller, atunci clasa la care ești abonat trebuie să moștenească ICapSubscribe și apoi să adauge eticheta [CapSubscribe("")]. Codul este următorul:
Deschide clientul de abonament și încearcă să accesezi http://localhost:28116/Home/UserRegister pentru a trimite mesaje, efectul este următorul:
Atât consola, cât și receptorul controllerului sunt declanșate, așa cum se arată în figura de mai jos:
Încearcă să arunci manual o excepție în metoda mesajului de recepție, codul este următorul:
CAP va încerca automat metoda,Numărul de încercări după eșec este implicit 50, iar intervalul de reîncercare după eșec este implicit de 60 de secunde, așa cum se arată în figura de mai jos:
Framework-ul nu poate fi 100% sigur că mesajul este executat o singură datăPrin urmare, în unele scenarii cheie, partea de mesaj acordă atenție deduplicării afacerilor în procesul de implementare a metodei.
În final, atașează codul sursă:
Turiști, dacă vreți să vedeți conținutul ascuns al acestei postări, vă rog Răspunde
|