CAP-prinsipper
CAP-prinsippet, også kjent som CAP-teoremet, refererer til konsistens, tilgjengelighet og partisjonstoleranse i et distribuert system. CAP-prinsippet sier at disse tre elementene kun kan oppnå to punkter samtidig.Det er umulig å ta alle tre samtidig。
Kjernen i CAP-prinsippet er enten AP, CP eller AC, men det finnes ingen CAP. Hvis det ikke finnes en kopi av dataene i et distribuert system, må systemet oppfylle den sterke konsistensbetingelsen, fordi det kun finnes unike data, det vil ikke være noen datainkonsistens, på dette tidspunktet er de to elementene C og P til stede, men hvis systemet har en nettverksoppdeling eller nedetid, vil det uunngåelig føre til at noen data blir utilgjengelige, og tilgjengelighetsbetingelsen kan ikke oppfylles, det vil si at CP-systemet oppnås i dette tilfellet, menCAP kan ikke tilfredsstilles samtidig。
Anmeldelse:
DotNetCore.CAP
CAP er en hendelsesbuss og implementering i et distribuert system (SOA, MicroService).Endelig konsistens(Distributed Transactions) er et åpen kildekode C#-bibliotek som er lett, høyytelses og lett å bruke.
GitHub-adresse:Innloggingen med hyperkoblingen er synlig.
Dotnet CAP har alle funksjonene til Event Bus, og CAP gir en mer strømlinjeformet måte å håndtere publisering/abonnement i EventBus.
MediatR er et pågående rammeverk for meldingsabonnement og publisering som tilbyr Send-metoden for publisering til én handler og Publish-metoden for publisering til flere håndterere, noe som er svært praktisk å bruke. For øyeblikket er .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 og andre versjoner, som kan brukes på tvers av plattformer.
ASP.NET Core bruker MediatR-mellommannsmodellen
https://www.itsvse.com/thread-9272-1-1.html Arkitekturforhåndsvisning
CAP støtter meldingskøer som Kafka, RabbitMQ, AzureServiceBus, AmazonSQS osv., og CAP tilbyr utvidelser for SQL Server, MySql, PostgreSQL og MongoDB som databaselagring.
Denne artikkelen bruker RabbitMQ og SQL Server som meldingskøer og lagring.
Installer RabbitMQ
For spesifikke installasjonsveiledninger, vennligst se til:
Å legge til konto er også utelatt, vennligst se:
Jeg la til testkontoen og begrenser Virtual Hosts selv, som vist nedenfor:
Ellers vil feilen være som følger:
ACCESS_REFUSED - Innlogging ble nektet ved å bruke autentiseringsmekanismen PLAIN. For detaljer, se meglerens loggfil.
Ingen av de angitte endepunktene var tilgjengelige
.NET Core integrerer CAP
Først, opprett et nytt ASP.NET Core-prosjekt som både er avsender og mottaker. Bruk nuget-kommandoen for å installere pakken slik:
Ved oppstart, konfigurer tjenestemetoden ConfigureServices som følger:
Du kan besøke nettsiden /cap-adressen for å se dashbordet som vist nedenfor:
Datapersistens: Cap vilAutomatisk opprettelse"Publisert" og "Mottatt" er to lokale databasetabeller
CREATE TABLE [cap]. [Publisert] ( [ID] [bigint] IKKE NULL, [Versjon] [nvarchar] (20) IKKE NULL, [Navn] [nvarchar] (200) IKKE NULL, [Innhold] [nvarchar] (max) NULL, [Prøver igjen] [int] IKKE NULL, [Lagt til] [datetime2] (7) IKKE NULL, [UtløperAtt] [datetime2] (7) NULL, [StatusNavn] [nvarchar] (50) IKKE NULL, BEGRENSNING [PK_cap. Publisert] PRIMÆRNØKKEL KLYNGET
( [Id] ASC )MED (PAD_INDEX = AV, STATISTICS_NORECOMPUTE = AV, IGNORE_DUP_KEY = AV, ALLOW_ROW_LOCKS = PÅ, ALLOW_PAGE_LOCKS = PÅ) PÅ [PRIMÆR] ) PÅ [PRIMÆR] TEXTIMAGE_ON [PRIMÆR] GÅ CREATE TABLE [cap]. [Mottatt] ( [ID] [bigint] IKKE NULL, [Versjon] [nvarchar] (20) IKKE NULL, [Navn] [nvarchar] (200) IKKE NULL, [Gruppe] [nvarchar] (200) NULL, [Innhold] [nvarchar] (max) NULL, [Prøver igjen] [int] IKKE NULL, [Lagt til] [datetime2] (7) IKKE NULL, [UtløperAtt] [datetime2] (7) NULL, [StatusNavn] [nvarchar] (50) IKKE NULL, BEGRENSNING [PK_cap. Mottatt] PRIMÆRNØKKEL KLYNGET
( [Id] ASC )MED (PAD_INDEX = AV, STATISTICS_NORECOMPUTE = AV, IGNORE_DUP_KEY = AV, ALLOW_ROW_LOCKS = PÅ, ALLOW_PAGE_LOCKS = PÅ) PÅ [PRIMÆR] ) PÅ [PRIMÆR] TEXTIMAGE_ON [PRIMÆR] GÅ
HomeController-kontrollermetoden er som følger:
Når brukeren registrerer seg, vil 3 meldinger med ulike temaer bli sendt, og deretter vil abonnenten konsumere dem.
Når CAP starter, vil den opprette en standard forbrukergruppe, hvis flere brukere av samme forbrukergruppe konsumerer samme temamelding,Kun én forbruker vil bli henrettet。 Tvert imot,Hvis alle forbrukerne tilhører ulike forbrukergrupper, blir alle forbrukere utført。
Ved å opprette et nytt .NET Core-konsollprosjekt, som abonnent (forbruker), eller ved å referere til pakken, kan dashbordet ignoreres.
Hvis det er i kontrolleren, legg til [CapSubscribe("")] direkte for å abonnere på de relevante meldingene.
Hvis metoden din ikke er i Controller, må klassen du abonnerer på arve ICapSubscribe og deretter legge til taggen [CapSubscribe("")]. Koden er som følger:
Åpne abonnementsklienten og prøv å få tilgang til http://localhost:28116/Home/UserRegister for å sende meldinger, effekten er som følger:
Både konsollen og kontrollermottakeren utløses, som vist i figuren nedenfor:
Prøv å legge inn et unntak manuelt i mottakende meldingsmetode, koden er som følger:
CAP vil automatisk prøve metoden på nytt,Antall forsøk etter feil er som standard 50, og intervallet etter feil er 60 sekunder som standard, som vist i figuren nedenfor:
Rammeverket kan ikke være 100 % sikkert på at meldingen bare kjøres én gangDerfor er meldingssiden i noen nøkkelscenarier oppmerksom på forretningsdeduplisering i prosessen med metodimplementering.
Til slutt, legg ved kildekoden:
Turister, hvis dere vil se det skjulte innholdet i dette innlegget, vær så snill Svare
|