Principy CAP
Princip CAP, známý také jako věta o CAP, označuje konzistenci, dostupnost a toleranci rozdělení v distribuovaném systému. Princip CAP říká, že tyto tři prvky mohou dosáhnout pouze dvou bodů současně.Není možné vzít všechny tři najednou。
Podstatou principu CAP je buď AP, CP nebo AC, ale CAP neexistuje. Pokud v distribuovaném systému není kopie dat, musí systém splňovat podmínku silné konzistence, protože existuje pouze jedinečná data, nebude žádná nekonzistence dat, v tomto okamžiku jsou přítomny dva prvky C a P, ale pokud má systém podmínku rozdělení sítě nebo výpadek, nevyhnutelně to povede k tomu, že některá data budou nedostupná a podmínka dostupnosti nemůže být splněna, tedy v tomto případě je CP systém získán, aleCAP nelze uspokojit současně。
Přezkoumání:
DotNetCore.CAP
CAP je event bus a implementace v distribuovaném systému (SOA, MicroService).Konečná konzistence(Distributed Transactions) je open-source knihovna v C#, která je lehká, vysoce výkonná a snadno použitelná.
Adresa GitHubu:Přihlášení k hypertextovému odkazu je viditelné.
Dotnet CAP má všechny funkce Event Bus a CAP poskytuje efektivnější způsob zpracovávání publikování a odběru v EventBusu.
MediatR je rámec pro předplatu a publikování zpráv v procesu, který poskytuje metodu Send pro publikování do jednoho handleru a metodu Publish pro publikování do více handlerů, což je velmi pohodlné na použití. V současnosti .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 a další verze, které lze používat napříč platformami.
ASP.NET Core používá model MediatR jako prostředník
https://www.itsvse.com/thread-9272-1-1.html Náhled architektury
CAP podporuje fronty zpráv jako Kafka, RabbitMQ, AzureServiceBus, AmazonSQS atd. a CAP poskytuje rozšíření pro Sql Server, MySql, PostgreSQL a MongoDB jako databázové úložiště.
Tento článek používá RabbitMQ a SQL Server jako fronty zpráv a úložiště.
Nainstalovat RabbitMQ
Pro konkrétní instalační návody se prosím podívejte na:
Přidání účtu je také vynecháno, viz prosím:
Testovací účet a omezení virtuálních hostitelů jsem přidal sám, jak je vidět níže:
Jinak bude chyba následující:
ACCESS_REFUSED - Přihlášení bylo odmítnuto pomocí autentizačního mechanismu PLAIN. Podrobnosti najdete v logfile makléře.
Žádný ze specifikovaných koncových bodů nebyl dosažitelný
.NET Core integruje CAP
Nejprve vytvořte nový projekt ASP.NET Core, který je zároveň odesílatelem i příjemcem. Použijte příkaz nuget k instalaci balíčku takto:
Při startu nakonfigurujte metodu služby ConfigureServices následovně:
Můžete navštívit webové stránky / cap adresu a zobrazit dashboard, jak je uvedeno níže:
Trvalost dat: Cap budeAutomatické vytváření"Publikováno" a "Přijato" jsou dvě tabulky v lokálních databázích
VYTVOŘTE TABULKU [cap]. [Publikováno] ( [ID] [bigint] NE NULL, [Verze] [Nvarchar] (20) NE NULL, [Jméno] [Nvarchar] (200) NENÍ NULL, [Obsah] [Nvarchar] (Max) NULL, [Opakuje] [int] NE NULL, [Přidáno] [datetime2] (7) NENÍ NULL, [ExpiresAt] [datetime2] (7) NULL, [StatusName] [Nvarchar] (50) NE NULL, OMEZENÍ [PK_cap. Publikováno] PRIMÁRNÍ KLÍČ SHLUKOVÁN
( [Id] ASC )KDE (PAD_INDEX = VYPNUTO, STATISTICS_NORECOMPUTE = VYPNUTO, IGNORE_DUP_KEY = VYPNUTO, ALLOW_ROW_LOCKS = ZAPNUTO, ALLOW_PAGE_LOCKS = ZAPNUTO) ZAPNUTÉ [PRIMÁRNÍ] ) NA [PRIMÁRNĚ] TEXTIMAGE_ON [PRIMÁRKY] JDI VYTVOŘTE TABULKU [cap]. [Přijato] ( [ID] [bigint] NE NULL, [Verze] [Nvarchar] (20) NE NULL, [Jméno] [Nvarchar] (200) NENÍ NULL, [Skupina] [Nvarchar] (200) NULL, [Obsah] [Nvarchar] (Max) NULL, [Opakuje] [int] NE NULL, [Přidáno] [datetime2] (7) NENÍ NULL, [ExpiresAt] [datetime2] (7) NULL, [StatusName] [Nvarchar] (50) NE NULL, OMEZENÍ [PK_cap. [PŘIJATO] PRIMÁRNÍ KLÍČ SESKUPEN
( [Id] ASC )KDE (PAD_INDEX = VYPNUTO, STATISTICS_NORECOMPUTE = VYPNUTO, IGNORE_DUP_KEY = VYPNUTO, ALLOW_ROW_LOCKS = ZAPNUTO, ALLOW_PAGE_LOCKS = ZAPNUTO) ZAPNUTÉ [PRIMÁRNÍ] ) NA [PRIMÁRNĚ] TEXTIMAGE_ON [PRIMÁRKY] JDI
Metoda ovladače HomeController je následující:
Když se uživatel úspěšně zaregistruje, budou odeslány 3 zprávy s různými tématy, které pak odběratel spotřebuje.
Když CAP začne, vytvoří výchozí skupinu spotřebitelů, pokud více spotřebitelů ze stejné skupiny konzumuje stejnou zprávu o tématu,Bude popraven pouze jeden spotřebitel。 Naopak,Pokud jsou spotřebitelé všichni v různých skupinách spotřebitelů, všichni spotřebitelé jsou popraveni。
Při vytváření nového .NET Core konzolového projektu jako odběratel (spotřebitel) nebo odkazování na balíček lze dashboard ignorovat.
Pokud je v řadiči, přidej [CapSubscribe("")] přímo pro odběr příslušných zpráv.
Pokud vaše metoda není v Controlleru, pak třída, ke které se přihlásíte, musí zdědit ICapSubscribe a poté přidat značku [CapSubscribe("")]. Kód je následující:
Otevřete klienta předplatného a zkuste se dostat k http://localhost:28116/Home/UserRegister pro odesílání zpráv, efekt je následující:
Spouštějí se jak konzole, tak receiver ovladače, jak je znázorněno na obrázku níže:
Zkuste ručně vyhodit výjimku v metodě přijímací zprávy, kód je následující:
CAP automaticky zkusí metodu znovu,Počet opakování po neúspěchu je ve výchozím nastavení 50 a interval opakovaných pokusů po neúspěchu je ve výchozím nastavení 60 sekund, jak je znázorněno na obrázku níže:
Framework nemůže být stoprocentně jistý, že zpráva se vykoná pouze jednouProto v některých klíčových scénářích věnuje zprávová strana pozornost obchodní deduplikaci při implementaci metody.
Nakonec přiložte zdrojový kód:
Turisté, pokud chcete vidět skrytý obsah tohoto příspěvku, prosím Odpověď
|