CAP-principer
CAP-principen, även känd som CAP-satsen, syftar på konsistens, tillgänglighet och partitionstolerans i ett distribuerat system. CAP-principen säger att dessa tre element endast kan uppnå två punkter samtidigt.Det är omöjligt att ta alla tre samtidigt。
Kärnan i CAP-principen är antingen AP, CP eller AC, men det finns ingen CAP. Om det inte finns någon kopia av data i ett distribuerat system måste systemet uppfylla villkoret för stark konsistens, eftersom det bara finns en unik data, det kommer inte att finnas någon datainkonsistens, vid denna tidpunkt finns de två elementen C och P, men om systemet har ett nätverkspartitionsvillkor eller driftstopp kommer det oundvikligen att leda till att viss data blir otillgänglig, och tillgänglighetsvillkoret kan inte uppfyllas, det vill säga CP-systemet erhålls i detta fall, menCAP kan inte uppfyllas samtidigt。
Recension:
DotNetCore.CAP
CAP är en händelsebuss och implementation i ett distribuerat system (SOA, MicroService).Slutlig konsekvens(Distributed Transactions) är ett öppen källkodsbibliotek för C# som är lättviktigt, högpresterande och lätt att använda.
GitHub-adress:Inloggningen med hyperlänken är synlig.
Dotnet CAP har alla funktioner som Event Bus, och CAP erbjuder ett mer strömlinjeformat sätt att hantera publicering/prenumeration i EventBus.
MediatR är ett pågående ramverk för prenumeration och publicering av meddelanden som tillhandahåller Skicka-metoden för publicering till en enda hanterare och Publicer-metoden för publicering till flera hanterare, vilket är mycket bekvämt att använda. För närvarande är .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 och andra versioner, som kan användas över plattformar.
ASP.NET Core använder MediatR-mellanliggande modellen
https://www.itsvse.com/thread-9272-1-1.html Arkitekturförhandsvisning
CAP stöder meddelandeköer såsom Kafka, RabbitMQ, AzureServiceBus, AmazonSQS med flera, och CAP tillhandahåller tillägg för SQL Server, MySql, PostgreSQL och MongoDB som databaslagring.
Den här artikeln använder RabbitMQ och SQL Server som meddelandeköer och lagring.
Installera RabbitMQ
För specifika monteringsguider, vänligen se:
Att lägga till ett konto utelämnas också, vänligen se:
Jag lade till testkontot och taket för Virtual Hosts själv, som visas nedan:
Annars blir felet följande:
ACCESS_REFUSED - Inloggning nekades med autentiseringsmekanismen PLAIN. För detaljer, se mäklarens loggfil.
Ingen av de angivna slutpunkterna var nåbar.
.NET Core integrerar CAP
Först, skapa ett nytt ASP.NET Core-projekt som är både avsändare och mottagare. Använd nuget-kommandot för att installera paketet så här:
Vid uppstart, konfigurera tjänstemetoden ConfigureServices enligt följande:
Du kan besöka webbplatsen /cap-adressen för att se instrumentpanelen som visas nedan:
Databeständighet: Cap kommer att göra detAutomatisk skapelse"Publicerad" och "Mottagen" är två lokala databastabeller
SKAPA TABELL [cap]. [Publicerad] ( [ID] [bigint] INTE NULL, [Version] [nvarchar] (20) INTE NULL, [Namn] [nvarchar] (200) INTE NULL, [Innehåll] [nvarchar] (max) NULL, [Försöker tillbaka] [int] INTE NULL, [Tillagd] [datetime2] (7) INTE NULL, [UtlösesAt] [datetime2] (7) NULL, [StatusNamn] [nvarchar] (50) INTE NULL, BEGRÄNSNING [PK_cap. Publicerad] PRIMÄRNYCKEL KLUSTRADE
( [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] KÖR SKAPA TABELL [cap]. [Mottaget] ( [ID] [bigint] INTE NULL, [Version] [nvarchar] (20) INTE NULL, [Namn] [nvarchar] (200) INTE NULL, [Grupp] [nvarchar] (200) NULL, [Innehåll] [nvarchar] (max) NULL, [Försöker tillbaka] [int] INTE NULL, [Tillagd] [datetime2] (7) INTE NULL, [UtlösesAt] [datetime2] (7) NULL, [StatusNamn] [nvarchar] (50) INTE NULL, BEGRÄNSNING [PK_cap. Mottaget] PRIMÄRNYCKEL KLUSTRADE
( [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] KÖR
HomeController-kontrollermetoden är som följer:
När användaren registrerar sig framgångsrikt skickas tre meddelanden med olika ämnen, och prenumeranten tar emot dem.
När CAP startar kommer den att skapa en standardkonsumentgrupp, om flera konsumenter av samma konsumentgrupp konsumerar samma ämnesmeddelande,Endast en konsument kommer att avrättas。 Tvärtom,Om konsumenterna alla tillhör olika konsumentgrupper är alla konsumenter exekverade。
Att skapa ett nytt .NET Core-konsolprojekt, som abonnent (konsument), eller genom att referera till paketet, kan dashboarden ignoreras.
Om det finns i Controller, lägg till [CapSubscribe("")] direkt för att prenumerera på relevanta meddelanden.
Om din metod inte finns i Controller, måste klassen du prenumererar på ärva ICapSubscribe och sedan lägga till taggen [CapSubscribe("")]. Koden är följande:
Öppna prenumerationsklienten och försök komma åt http://localhost:28116/Home/UserRegister för att skicka meddelanden, effekten är följande:
Både konsolen och kontrollmottagaren aktiveras, som visas i figuren nedan:
Försök att manuellt lägga ett undantag i mottagarmeddelandemetoden, koden är följande:
CAP kommer automatiskt att försöka metoden igen,Antalet försök efter misslyckande är som standard 50, och intervallet efter misslyckande är 60 sekunder som standard, som visas i figuren nedan:
Ramverket kan inte vara 100 % säkert på att meddelandet bara körs en gångDärför uppmärksammar meddelandesidan i vissa nyckelscenarier affärsdeduplicering i processen för metodimplementering.
Slutligen, bifoga källkoden:
Turister, om ni vill se det dolda innehållet i detta inlägg, snälla Svar
|