CAP-principper
CAP-princippet, også kendt som CAP-sætningen, refererer til konsistens, tilgængelighed og partitionstolerance i et distribueret system. CAP-princippet siger, at disse tre elementer kun kan opnå to punkter på samme tid.Det er umuligt at tage alle tre på samme tid。
Essensen af CAP-princippet er enten AP, CP eller AC, men der findes ikke noget CAP. Hvis der ikke findes en kopi af dataene i et distribueret system, skal systemet opfylde den stærke konsistensbetingelse, fordi der kun er en unik data, der vil ikke være nogen datainkonsistens, på dette tidspunkt er de to elementer C og P til stede, men hvis systemet har en netværkspartitionsbetingelse eller nedetid, vil det uundgåeligt føre til, at nogle data er utilgængelige, og tilgængelighedsbetingelsen kan ikke opfyldes, det vil sige, CP-systemet opnås i dette tilfælde, menCAP kan ikke opfyldes samtidig。
Anmeldelse:
DotNetCore.CAP
CAP er en eventbus og implementering i et distribueret system (SOA, MicroService).Endelig konsistens(Distributed Transactions) er et open source C#-bibliotek, der er letvægts, højtydende og let at bruge.
GitHub-adresse:Hyperlink-login er synlig.
Dotnet CAP har alle funktionerne fra Event Bus, og CAP giver en mere strømlinet måde at håndtere publicering/abonnement i EventBus.
MediatR er et in-process beskedabonnements- og publiceringsframework, der tilbyder Send-metoden til udgivelse til en enkelt handler og Publicer-metoden til publicering til flere håndterere, hvilket er meget praktisk at bruge. I øjeblikket er .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 og andre versioner, som kan bruges på tværs af platforme.
ASP.NET Core bruger MediatR-mellemledsmodellen
https://www.itsvse.com/thread-9272-1-1.html Arkitekturforhåndsvisning
CAP understøtter beskedkøer som Kafka, RabbitMQ, AzureServiceBus, AmazonSQS osv., og CAP tilbyder udvidelser til SQL Server, MySql, PostgreSQL og MongoDB som databaselagring.
Denne artikel bruger RabbitMQ og SQL Server som beskedkøer og lagring.
Installer RabbitMQ
For specifikke installationsvejledninger, henvises til:
Tilføjelse af en konto er også udeladt, henvises til:
Jeg tilføjede selv testkontoen og loftet for virtuelle værter, som vist nedenfor:
Ellers vil fejlen være som følger:
ACCESS_REFUSED - Login blev nægtet ved hjælp af autentificeringsmekanismen PLAIN. For detaljer, se mæglerens logfil.
Ingen af de angivne endepunkter var tilgængelige
.NET Core integrerer CAP
Først skal du oprette et nyt ASP.NET Core-projekt, som både er afsender og modtager. Brug nuget-kommandoen til at installere pakken sådan her:
Ved opstart konfigureres servicemetoden ConfigureServices som følger:
Du kan besøge hjemmesiden /cap-adressen for at se dashboardet som vist nedenfor:
Datapersistens: Cap vilAutomatisk oprettelse"Publiceret" og "Modtaget" er to lokale databasetabeller
OPRET TABEL [cap]. [Udgivet] ( [Id] [bigint] IKKE NULL, [Version] [nvarchar] (20) IKKE NULL, [Navn] [nvarchar] (200) IKKE NULL, [Indhold] [nvarchar] (max) NULL, [Forsøger igen] [int] IKKE NULL, [Tilføjet] [datetime2] (7) IKKE NULL, [UdløberAt] [datetime2] (7) NULL, [StatusNavn] [nvarchar] (50) IKKE NULL, BEGRÆNSNING [PK_cap. Publiceret] PRIMÆR NØGLE KLYNGET
( [Id] ASC )MED (PAD_INDEX = SLUKKET, STATISTICS_NORECOMPUTE = SLUKKET, IGNORE_DUP_KEY = SLUKKET, ALLOW_ROW_LOCKS = TÆNDT, ALLOW_PAGE_LOCKS = TÆNDT) PÅ [PRIMÆRT] ) PÅ [PRIMÆR] TEXTIMAGE_ON [PRIMÆR] GÅ OPRET TABEL [cap]. [Modtaget] ( [Id] [bigint] IKKE NULL, [Version] [nvarchar] (20) IKKE NULL, [Navn] [nvarchar] (200) IKKE NULL, [Gruppe] [nvarchar] (200) NULL, [Indhold] [nvarchar] (max) NULL, [Forsøger igen] [int] IKKE NULL, [Tilføjet] [datetime2] (7) IKKE NULL, [UdløberAt] [datetime2] (7) NULL, [StatusNavn] [nvarchar] (50) IKKE NULL, BEGRÆNSNING [PK_cap. Modtaget] PRIMÆRNØGLE KLYNGET
( [Id] ASC )MED (PAD_INDEX = SLUKKET, STATISTICS_NORECOMPUTE = SLUKKET, IGNORE_DUP_KEY = SLUKKET, ALLOW_ROW_LOCKS = TÆNDT, ALLOW_PAGE_LOCKS = TÆNDT) PÅ [PRIMÆRT] ) PÅ [PRIMÆR] TEXTIMAGE_ON [PRIMÆR] GÅ
HomeController-controller-metoden er som følger:
Når brugeren registrerer sig succesfuldt, vil der blive sendt 3 beskeder med forskellige emner, og derefter vil abonnenten modtage dem.
Når CAP starter, vil den oprette en standard forbrugergruppe, hvis flere forbrugere af samme forbrugergruppe forbruger det samme emnebudskab,Kun én forbruger vil blive henrettet。 Tværtimod,Hvis forbrugerne alle er i forskellige forbrugergrupper, bliver alle forbrugere henrettet。
Oprettelse af et nyt .NET Core-konsolprojekt som abonnent (forbruger) eller ved at referere til pakken, kan dashboardet ignoreres.
Hvis det er i controlleren, tilføj [CapSubscribe("")] direkte for at abonnere på de relevante beskeder.
Hvis din metode ikke er i Controlleren, skal den klasse, du abonnerer på, arve ICapSubscribe og derefter tilføje tagget [CapSubscribe("")]. Koden er som følger:
Åbn abonnementsklienten og prøv at få adgang til http://localhost:28116/Home/UserRegister for at sende beskeder, effekten er som følger:
Både konsollen og controller-modtageren aktiveres, som vist i figuren nedenfor:
Prøv manuelt at kaste en undtagelse i den modtagende beskedmetode, koden er som følger:
CAP vil automatisk prøve metoden igen,Antallet af forsøg efter fejl er som standard 50, og intervallet efter fejl er som standard 60 sekunder, som vist i figuren nedenfor:
Frameworket kan ikke være 100% sikker på, at beskeden kun udføres én gangDerfor lægger beskedsiden i nogle nøglescenarier vægt på forretningsdeduplikering i processen med metodeimplementering.
Endelig vedhæft kildekoden:
Turister, hvis I vil se det skjulte indhold i dette indlæg, så vær venlig Svar
|