CAP-Grundsätze
Das CAP-Prinzip, auch bekannt als CAP-Theorem, bezieht sich auf die Konsistenz, Verfügbarkeit und Partitionstoleranz in einem verteilten System. Das CAP-Prinzip besagt, dass diese drei Elemente nur zwei Punkte gleichzeitig erreichen können.Es ist unmöglich, alle drei gleichzeitig zu nehmen。
Das Wesentliche des CAP-Prinzips ist entweder AP, CP oder AC, aber es gibt kein CAP. Wenn es keine Kopie der Daten in einem verteilten System gibt, muss das System die starke Konsistenzbedingung erfüllen, da es nur eine eindeutige Daten gibt, gibt es keine Dateninkonsistenz, zu diesem Zeitpunkt sind die beiden Elemente C und P vorhanden, aber wenn das System eine Netzwerkpartition oder einen Ausfall hat, führt dies zwangsläufig dazu, dass einige Daten unzugänglich sind, und die Verfügbarkeitsbedingung kann nicht erfüllt werden, das heißt, in diesem Fall wird das CP-System erhalten, aberCAP kann nicht gleichzeitig erfüllt werden。
Rezension:
DotNetCore.CAP
CAP ist ein Ereignisbus und eine Implementierung in einem verteilten System (SOA, MicroService).Endgültige Konsistenz(Distributed Transactions) ist eine Open-Source-C#-Bibliothek, die leicht, leistungsstark und einfach zu bedienen ist.
GitHub-Adresse:Der Hyperlink-Login ist sichtbar.
Dotnet CAP verfügt über alle Funktionen des Event Bus, und CAP bietet eine schlankere Möglichkeit, Veröffentlichung und Abonnement in EventBus zu verwalten.
MediatR ist ein in Bearbeitung befindliches Nachrichtenabonnement- und Publishing-Framework, das die Send-Methode für die Veröffentlichung an einen einzelnen Handler und die Publishing-Methode für die Veröffentlichung an mehrere Handler bereitstellt, was sehr praktisch zu bedienen ist. Derzeit ist .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 und andere Versionen, die plattformübergreifend verwendet werden können.
ASP.NET Core verwendet das MediatR-Zwischenmodell
https://www.itsvse.com/thread-9272-1-1.html Architekturvorschau
CAP unterstützt Nachrichtenwarteschlangen wie Kafka, RabbitMQ, AzureServiceBus, AmazonSQS usw., und CAP stellt Erweiterungen für SQL Server, MySql, PostgreSQL und MongoDB als Datenbankspeicher bereit.
Dieser Artikel verwendet RabbitMQ und SQL Server als Nachrichtenwarteschlangen und Speicher.
Installiere RabbitMQ
Für spezifische Installations-Tutorials siehe bitte:
Das Hinzufügen eines Kontos ist ebenfalls weggelassen, bitte beachten Sie:
Ich habe das Testkonto selbst hinzugefügt und Virtual Hosts begrenzt, wie unten gezeigt:
Andernfalls lautet der Fehler wie folgt:
ACCESS_REFUSED – Die Anmeldung wurde mit dem Authentifizierungsmechanismus PLAIN abgelehnt. Details finden Sie im Makler-Logfile.
Keiner der angegebenen Endpunkte war erreichbar
.NET Core integriert CAP
Erstellen Sie zunächst ein neues ASP.NET Core-Projekt, das sowohl Sender als auch Empfänger ist. Verwenden Sie den Nuget-Befehl, um das Paket so zu installieren:
Beim Start konfigurieren Sie die Service-Methode ConfigureServices wie folgt:
Sie können die Website /cap-Adresse besuchen, um das unten gezeigte Dashboard einzusehen:
Datenpersistenz: Cap wird es tunAutomatische Erstellung"Veröffentlicht" und "Empfangen" sind zwei lokale Datenbanktabellen
TABELLE ERSTELLEN [Cap]. [Veröffentlicht] ( [ID] [bigint] NICHT NULL, [Version] [nvarchar] (20) NICHT NULL, [Name] [nvarchar] (200) NICHT NULL, [Inhalt] [nvarchar] (max) NULL, [Versucht wieder] [int] NICHT NULL, [Hinzugefügt] [Datetime2] (7) NICHT NULL, [AblaufAt] [Datetime2] (7) NULL, [StatusName] [nvarchar] (50) NICHT NULL, EINSCHRÄNKUNG [PK_cap. Veröffentlicht] PRIMÄRSCHLÜSSEL CLUSTERED
( [ID] ASC )MIT (PAD_INDEX = AUS, STATISTICS_NORECOMPUTE = AUS, IGNORE_DUP_KEY = AUS, ALLOW_ROW_LOCKS = AN, ALLOW_PAGE_LOCKS = AN) AUF [PRIMÄR] ) AUF [PRIMÄR] TEXTIMAGE_ON [PRIMÄR] LOS TABELLE ERSTELLEN [Cap]. [Empfangen] ( [ID] [bigint] NICHT NULL, [Version] [nvarchar] (20) NICHT NULL, [Name] [nvarchar] (200) NICHT NULL, [Gruppe] [nvarchar] (200) NULL, [Inhalt] [nvarchar] (max) NULL, [Versucht wieder] [int] NICHT NULL, [Hinzugefügt] [Datetime2] (7) NICHT NULL, [AblaufAt] [Datetime2] (7) NULL, [StatusName] [nvarchar] (50) NICHT NULL, EINSCHRÄNKUNG [PK_cap. Empfangen] PRIMÄRSCHLÜSSEL GRUPPIERT
( [ID] ASC )MIT (PAD_INDEX = AUS, STATISTICS_NORECOMPUTE = AUS, IGNORE_DUP_KEY = AUS, ALLOW_ROW_LOCKS = AN, ALLOW_PAGE_LOCKS = AN) AUF [PRIMÄR] ) AUF [PRIMÄR] TEXTIMAGE_ON [PRIMÄR] LOS
Die HomeController-Controller-Methode ist wie folgt:
Wenn der Nutzer sich erfolgreich registriert, werden 3 Nachrichten mit unterschiedlichen Themen gesendet, die der Abonnent dann konsumiert.
Wenn CAP startet, wird eine Standard-Konsumentengruppe erstellt, wenn mehrere Konsumenten derselben Konsumentengruppe dieselbe Themennachricht konsumieren,Nur ein Konsument wird hingerichtet。 Im GegenteilWenn alle Konsumenten zu verschiedenen Verbrauchergruppen gehören, werden alle Konsumenten ausgeführt。
Das Erstellen eines neuen .NET Core-Konsolenprojekts als Abonnent (Konsument) oder durch Referenzen auf das Paket kann das Dashboard ignoriert werden.
Wenn es im Controller ist, fügen Sie [CapSubscribe("")] direkt hinzu, um die entsprechenden Nachrichten zu abonnieren.
Wenn deine Methode nicht im Controller ist, muss die Klasse, die du abonnierst, ICapSubscribe übernehmen und dann das Tag [CapSubscribe("")] hinzufügen. Der Code lautet wie folgt:
Öffnen Sie den Abonnement-Client und versuchen Sie, auf http://localhost:28116/Home/UserRegister zuzugreifen, um Nachrichten zu senden, der Effekt ist wie folgt:
Sowohl die Konsole als auch der Controller-Empfänger werden ausgelöst, wie in der untenstehenden Abbildung dargestellt:
Versuchen Sie, eine Ausnahme manuell in der empfangenden Nachrichtenmethode zu verwenden, der Code lautet wie folgt:
CAP wird die Methode automatisch erneut versuchen,Die Anzahl der Wiederholungen nach einem Fehlschlag beträgt standardmäßig 50, und das Intervall nach dem Scheitern beträgt standardmäßig 60 Sekunden, wie in der untenstehenden Abbildung dargestellt:
Das Framework kann nicht zu 100 % sicher sein, dass die Nachricht nur einmal ausgeführt wirdDaher achtet die Nachrichtenseite in einigen Schlüsselszenarien auf Geschäftsdeduplizierung im Prozess der Methodenimplementierung.
Zum Schluss fügen Sie den Quellcode an:
Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitte Antwort
|