Zasady CAP
Zasada CAP, znana również jako twierdzenie CAP, odnosi się do spójności, dostępności i tolerancji podziału w systemie rozproszonym. Zasada CAP mówi, że te trzy elementy mogą osiągnąć tylko dwa punkty jednocześnie.Nie da się wziąć wszystkich trzech jednocześnie。
Istotą zasady CAP jest albo AP, CP, albo AC, ale nie ma CAP. Jeśli w systemie rozproszonym nie ma kopii danych, system musi spełniać warunek silnej spójności, ponieważ istnieje tylko unikalna da, nie będzie niespójności danych; w tym momencie obecne są dwa elementy C i P, ale jeśli system ma warunek partycji sieciowej lub przestoj, nieuchronnie doprowadzi to do niedostępności niektórych danych, a warunek dostępności nie może zostać spełniony, czyli system CP zostanie uzyskany w tym przypadku, aleCAP nie może być zadowolony jednocześnie。
Recenzja:
DotNetCore.CAP
CAP to magistrala zdarzeń i implementacja w systemie rozproszonym (SOA, MicroService).Ostateczna spójność(Distributed Transactions) to otwartoźródłowa biblioteka C#, która jest lekka, wydajna i łatwa w obsłudze.
Adres GitHub:Logowanie do linku jest widoczne.
Dotnet CAP posiada wszystkie funkcje Event Bus, a CAP zapewnia bardziej uproszczony sposób publikowania/subskrypcji w EventBus.
MediatR to framework subskrypcji i publikowania wiadomości w trakcie produkcji, który zapewnia metodę Send do publikowania do jednego handlera oraz metodę Publish do publikowania do wielu handlerów, co jest bardzo wygodne w użyciu. Obecnie .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 i inne wersje, które mogą być używane na różnych platformach.
ASP.NET Core wykorzystuje model pośredni MediatR
https://www.itsvse.com/thread-9272-1-1.html Zapowiedź architektury
CAP obsługuje kolejki wiadomości takie jak Kafka, RabbitMQ, AzureServiceBus, AmazonSQS itd., a CAP oferuje rozszerzenia dla Sql Server, MySql, PostgreSQL i MongoDB jako magazyn danych do przechowywania.
W tym artykule używa RabbitMQ i SQL Server jako kolejek i przechowywania wiadomości.
Zainstaluj RabbitMQ
Aby poznać konkretne tutoriale instalacyjne, zapoznaj się z:
Dodanie konta również jest pomijane, prosimy o odwołanie:
Sam dodałem konto testowe i ograniczyłem Virtual Hosts, jak pokazano poniżej:
W przeciwnym razie błąd będzie wyglądał następująco:
ACCESS_REFUSED - Logowanie zostało odrzucone za pomocą mechanizmu uwierzytelniania PLAIN. Szczegóły można znaleźć w pliku logowym brokera.
Żaden z określonych punktów końcowych nie był osiągalny
.NET Core integruje CAP
Najpierw stwórz nowy projekt ASP.NET Core, który jest zarówno nadawcą, jak i odbiorcą. Użyj polecenia nuget, aby zainstalować pakiet w ten sposób:
Podczas uruchamiania konfiguruj metodę usługi ConfigurServices w następujący sposób:
Możesz odwiedzić stronę internetową / adres cap, aby zobaczyć dashboard, jak pokazano poniżej:
Trwałość danych: CapAutomatyczne tworzenie"Opublikowane" i "Otrzymane" to dwie lokalne tabele bazy danych
UTWÓRZ TABELĘ [cap]. [Opublikowano] ( [Id] [bigint] NIE NULL, [Wersja] [nvarchar] (20) NIE ZEROWY, [Imię] [nvarchar] (200) NIE ZEROWY, [Treść] [nvarchar] (Max) NULL, [Powtarza] [int] NIE NULL, [Dodane] [datetime2] (7) NIE ZEROWY, [ExpiresAt] [datetime2] (7) NULL, [StatusName] [nvarchar] (50) NIE NULL, OGRANICZENIE [PK_cap. [OPUBLIKOWANO] KLUCZ GŁÓWNY KLASTROWANY
( [Id] ASC )GDZIE (PAD_INDEX = WYŁĄCZONY, STATISTICS_NORECOMPUTE = WYŁĄCZONY, IGNORE_DUP_KEY = WYŁĄCZONY, ALLOW_ROW_LOCKS = WŁĄCZONY, ALLOW_PAGE_LOCKS = WŁĄCZONY) NA [GŁÓWNY] ) W [PRIMARY] TEXTIMAGE_ON [PRIMARY] IDŹ UTWÓRZ TABELĘ [cap]. [Odebrano] ( [Id] [bigint] NIE NULL, [Wersja] [nvarchar] (20) NIE ZEROWY, [Imię] [nvarchar] (200) NIE ZEROWY, [Grupa] [nvarchar] (200) NULL, [Treść] [nvarchar] (Max) NULL, [Powtarza] [int] NIE NULL, [Dodane] [datetime2] (7) NIE ZEROWY, [ExpiresAt] [datetime2] (7) NULL, [StatusName] [nvarchar] (50) NIE NULL, OGRANICZENIE [PK_cap. [ODEBRANO] KLUCZ GŁÓWNY SKUPIONY
( [Id] ASC )GDZIE (PAD_INDEX = WYŁĄCZONY, STATISTICS_NORECOMPUTE = WYŁĄCZONY, IGNORE_DUP_KEY = WYŁĄCZONY, ALLOW_ROW_LOCKS = WŁĄCZONY, ALLOW_PAGE_LOCKS = WŁĄCZONY) NA [GŁÓWNY] ) W [PRIMARY] TEXTIMAGE_ON [PRIMARY] IDŹ
Metoda kontrolera HomeController wygląda następująco:
Po pomyślnej rejestracji użytkownika zostaną wysłane 3 wiadomości o różnych tematach, a następnie subskrybent je konsumuje.
Gdy CAP się rozpocznie, utworzy domyślną grupę konsumentów, jeśli wielu konsumentów z tej samej grupy konsumuje ten sam komunikat tematyczny,Zostanie wykonana egzekucja tylko jednego konsumenta。 Wręcz przeciwnie,Jeśli konsumenci należą do różnych grup konsumentów, wszyscy konsumenci są straconi。
Tworząc nowy projekt konsoli .NET Core, jako subskrybent (konsument) lub odwołując się do pakietu, dashboard może być zignorowany.
Jeśli jest w kontrolerze, dodaj bezpośrednio [CapSubscribe("")], aby subskrybować odpowiednie wiadomości.
Jeśli twoja metoda nie znajduje się w Controllerze, klasa, do której się subskrybujesz, musi odziedziczyć ICapSubscribe, a następnie dodać tag [CapSubscribe("")]. Kod jest następujący:
Otwórz klienta subskrypcyjnego i spróbuj uzyskać dostęp do http://localhost:28116/Home/UserRegister, aby wysłać wiadomości, efekt jest następujący:
Zarówno konsola, jak i odbiornik kontrolera są wyzwalane, jak pokazano na poniższym rysunku:
Spróbuj ręcznie wyrzucić wyjątek w metodzie odbiorczej wiadomości, kod wygląda następująco:
CAP automatycznie ponownie spróbuje metodę,Domyślnie liczba powtórek po niepowodzeniu wynosi 50, a domyślnie 60 sekund, jak pokazano na poniższym rysunku:
Framework nie może być w 100% pewien, że wiadomość zostanie wykonana tylko razDlatego w niektórych kluczowych scenariuszach strona komunikatów zwraca uwagę na deduplikację biznesową w procesie wdrażania metody.
Na koniec dołącz kod źródłowy:
Turyści, jeśli chcecie zobaczyć ukrytą zawartość tego wpisu, proszę Odpowiedź
|