CAP-principes
Het CAP-principe, ook bekend als de CAP-stelling, verwijst naar de consistentie, beschikbaarheid en partitietolerantie in een gedistribueerd systeem. Het GLB-principe stelt dat deze drie elementen slechts twee punten tegelijk kunnen bereiken.Het is onmogelijk om alle drie tegelijk te nemen。
De essentie van het CAP-principe is ofwel AP, CP of AC, maar er is geen CAP. Als er geen kopie van de data is in een gedistribueerd systeem, moet het systeem voldoen aan de sterke consistentievoorwaarde, omdat er alleen een unieke data is, zal er geen gegevensinconsistentie zijn; op dit moment zijn de twee elementen C en P aanwezig, maar als het systeem een netwerkpartitievoorwaarde of downtime heeft, zal dit onvermijdelijk leiden tot ontoegankelijke data, en kan de beschikbaarheidsvoorwaarde niet worden vervuld, dat wil zeggen, het CP-systeem wordt in dit geval verkregen, maarCAP kan niet tegelijkertijd worden bevredigd。
Recensie:
DotNetCore.CAP
CAP is een eventbus en implementatie in een gedistribueerd systeem (SOA, MicroService).Eindconsistentie(Distributed Transactions) is een open-source C#-bibliotheek die lichtgewicht, hoogpresterend en gebruiksvriendelijk is.
GitHub-adres:De hyperlink-login is zichtbaar.
Dotnet CAP heeft alle functies van Event Bus, en CAP biedt een meer gestroomlijnde manier om publicatie/abonnement in EventBus te beheren.
MediatR is een in-process berichtabonnements- en publicatieframework dat de Verzendmethode biedt voor publiceren naar één handler en de Publishing-methode voor publiceren naar meerdere handlers, wat zeer handig is in gebruik. Momenteel is .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 en andere versies, die op verschillende platforms kunnen worden gebruikt.
ASP.NET Core gebruikt het MediatR-tussenliggende model
https://www.itsvse.com/thread-9272-1-1.html Architectuurvoorbeeld
CAP ondersteunt berichtwachtrijen zoals Kafka, RabbitMQ, AzureServiceBus, AmazonSQS, enzovoort, en CAP biedt extensies voor SQL Server, MySql, PostgreSQL en MongoDB als databaseopslag.
Dit artikel gebruikt RabbitMQ en SQL Server als berichtwachtrijen en opslag.
Installeer RabbitMQ
Voor specifieke installatietutorials, verwijs je naar:
Het toevoegen van een account is ook weggelaten, verwijs alstublieft naar:
Ik heb zelf het testaccount toegevoegd en Virtual Hosts begrensd, zoals hieronder te zien is:
Anders zal de fout als volgt zijn:
ACCESS_REFUSED - Inloggen werd geweigerd met behulp van het authenticatiemechanisme PLAIN. Voor details, zie het broker-logbestand.
Geen van de opgegeven eindpunten was bereikbaar
.NET Core integreert CAP
Maak eerst een nieuw ASP.NET Core-project aan dat zowel de zender als de ontvanger is. Gebruik het nuget-commando om het pakket zo te installeren:
Configureer bij het opstarten de servicemethode ConfigureServices als volgt:
Je kunt de website /cap address bezoeken om het dashboard hieronder te bekijken:
Datapersistentie: Cap zalAutomatische creatie"Gepubliceerd" en "Ontvangen" zijn twee lokale databasetabellen
CREATE TABLE [cap] aan. [Gepubliceerd] ( [Id] [bigint] NIET NULL, [Versie] [nvarchar] (20) NIET NULL, [Naam] [nvarchar] (200) NIET NUL, [Inhoud] [nvarchar] (max) NULL, [Probeert opnieuw] [int] NIET NULL, [Toegevoegd] [datetime2] (7) NIET NIETIG, [VerlooptAt] [datetime2] (7) NULL, [StatusNaam] [nvarchar] (50) NIET NIET, BEPERKING [PK_cap. Gepubliceerd] PRIMAIRE SLEUTEL GECLUSTERD
( [Id] ASC )MET (PAD_INDEX = UIT, STATISTICS_NORECOMPUTE = UIT, IGNORE_DUP_KEY = UIT, ALLOW_ROW_LOCKS = AAN, ALLOW_PAGE_LOCKS = AAN) AAN [PRIMAIR] ) OP [PRIMAIR] TEXTIMAGE_ON [PRIMAIR] GA CREATE TABLE [cap] aan. [Ontvangen] ( [Id] [bigint] NIET NULL, [Versie] [nvarchar] (20) NIET NULL, [Naam] [nvarchar] (200) NIET NUL, [Groep] [nvarchar] (200) NULL, [Inhoud] [nvarchar] (max) NULL, [Probeert opnieuw] [int] NIET NULL, [Toegevoegd] [datetime2] (7) NIET NIETIG, [VerlooptAt] [datetime2] (7) NULL, [StatusNaam] [nvarchar] (50) NIET NIET, BEPERKING [PK_cap. Ontvangen] PRIMAIRE SLEUTEL GECLUSTERD
( [Id] ASC )MET (PAD_INDEX = UIT, STATISTICS_NORECOMPUTE = UIT, IGNORE_DUP_KEY = UIT, ALLOW_ROW_LOCKS = AAN, ALLOW_PAGE_LOCKS = AAN) AAN [PRIMAIR] ) OP [PRIMAIR] TEXTIMAGE_ON [PRIMAIR] GA
De HomeController-controllermethode is als volgt:
Wanneer de gebruiker zich succesvol registreert, worden er 3 berichten met verschillende onderwerpen verzonden, waarna de abonnee ze consumeert.
Wanneer CAP begint, zal het een standaard consumentengroep aanmaken, als meerdere consumenten van dezelfde consumentengroep hetzelfde onderwerpbericht consumeren,Slechts één consument wordt geëxecuteerd。 Integendeel,Als de consumenten allemaal in verschillende consumentengroepen zitten, worden alle consumenten geëxecuteerd。
Het aanmaken van een nieuw .NET Core-consoleproject, als abonnee (consument), of het verwijzen naar het pakket, kan het dashboard worden genegeerd.
Als het in de Controller staat, voeg dan [CapSubscribe("")] direct toe om je te abonneren op de relevante berichten.
Als jouw methode niet in de Controller zit, moet de klasse waarop je je abonneert ICapSubscribe erven en vervolgens de tag [CapSubscribe("")] toevoegen. De code is als volgt:
Open de abonnementsclient en probeer http://localhost:28116/Home/UserRegister te bereiken om berichten te verzenden, het effect is als volgt:
Zowel de console als de controllerontvanger worden geactiveerd, zoals weergegeven in de onderstaande figuur:
Probeer handmatig een uitzondering te gooien in de ontvangende berichtmethode, de code is als volgt:
CAP zal de methode automatisch opnieuw proberen,Het aantal herpogingen na een mislukking is standaard 50, en het herpogingsinterval na een mislukking is standaard 60 seconden, zoals getoond in de onderstaande figuur:
Het framework kan niet 100% zeker zijn dat het bericht slechts één keer wordt uitgevoerdDaarom let de berichtzijde in sommige belangrijke scenario's op business deduplicatie tijdens het proces van methode-implementatie.
Voeg tenslotte de broncode bij:
Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieft Antwoord
|