Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 57382|Odpowiedź: 3

[ASP.NET] ASP.NET Core (pięć) opiera się na rozproszonych transakcjach CAP

[Skopiuj link]
Opublikowano 2021-3-17 18:12:50 | | | |
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

2PC &&3PC transakcji rozproszonych
https://www.itsvse.com/thread-9591-1-1.html

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:

ASP.NET Filtr Core(4) zunifikowany walidacja modelu modelu ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Rdzeń (iii) Dynamicznie twórz instancje za pomocą ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Rdzeń (2) Restart aplikacji za pomocą kodu
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) korzysta z buforowania Redis
https://www.itsvse.com/thread-9393-1-1.html


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:

【Praktyczna walka】Tutorial instalacji RabbitMQ pod Windows
https://www.itsvse.com/thread-4630-1-1.html

【Practice】RabbitMQ instaluje wtyczkę zarządzania siecią
https://www.itsvse.com/thread-4631-1-1.html
Dodanie konta również jest pomijane, prosimy o odwołanie:

【Practice】rabbitMQ console to add info account
https://www.itsvse.com/thread-4655-1-1.html
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.

Problemy z idempotencją interfejsu
https://www.itsvse.com/thread-6010-1-1.html

Na koniec dołącz kod źródłowy:

Turyści, jeśli chcecie zobaczyć ukrytą zawartość tego wpisu, proszęOdpowiedź






Poprzedni:Internetowa konwersja składni Markdown w CSV
Następny:HttpClient POST bezpośrednio do wysyłania żądań kompresji bajtów bajtów (gzip)
Opublikowano 2021-3-18 18:11:20 |
Przyjdź i zobacz, dzięki za podzielenie się
Opublikowano 2021-9-22 20:42:18 |
Naucz się uczyć...
Opublikowano 31.12.2021 o 15:08:21 |
Nauka
Bardzo dobrze, bardzo ładnie
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com