Принципи на CAP
Принципът CAP, известен още като теорема за CAP, се отнася до последователността, наличността и толерантността към разпределение в разпределена система. Принципът на CAP гласи, че тези три елемента могат да постигнат само две точки едновременно.Невъзможно е да се вземат и трите едновременно。
Същността на принципа на CAP е или AP, CP или AC, но няма CAP. Ако няма копие на данните в разпределена система, тогава системата трябва да изпълни условието за силна консистентност, защото има само уникални данни, няма да има несъответствие в данните, в този момент двата елемента C и P са налице, но ако системата има условие за разделение на мрежата или прекъсване, това неизбежно ще доведе до недостъпност на някои данни и условието за наличност не може да бъде изпълнено, т.е. CP системата се получава в този случай, ноCAP не може да бъде изпълнен едновременно。
Преглед:
DotNetCore.CAP
CAP е шина за събития и имплементация в разпределена система (SOA, MicroService).Крайна консистентност(Distributed Transactions) е библиотека с отворен код на C#, която е лека, висока производителност и лесна за използване.
GitHub адрес:Входът към хиперлинк е видим.
Dotnet CAP разполага с всички функции на Event Bus, а CAP предоставя по-опростен начин за публикуване/абонамент в EventBus.
MediatR е рамка за абонамент и публикуване на съобщения в процес на публикуване, която предоставя метода Send за публикуване към един обработващ уредник и метода Publish за публикуване към няколко обработващи, което е много удобно за използване. В момента .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 и други версии, които могат да се използват на различни платформи.
ASP.NET Core използва посредническия модел MediatR
https://www.itsvse.com/thread-9272-1-1.html Преглед на архитектурата
CAP поддържа опашки за съобщения като Kafka, RabbitMQ, AzureServiceBus, AmazonSQL и др., а CAP предоставя разширения за Sql Server, MySql, PostgreSQL и MongoDB като база данни.
Тази статия използва RabbitMQ и SQL Server като опашки за съобщения и съхранение.
Инсталирай RabbitMQ
За конкретни уроци по инсталация, моля, вижте с:
Добавянето на акаунт също е пропуснато, моля вижте на:
Аз сам добавих тестовия акаунт и ограничих виртуалните хостове, както е показано по-долу:
В противен случай грешката ще бъде следната:
ACCESS_REFUSED - Входът беше отказан чрез механизма за удостоверяване PLAIN. За подробности вижте логфайла на брокера.
Нито една от посочените крайни точки не беше достижима
.NET Core интегрира CAP
Първо, създайте нов ASP.NET Core проект, който е едновременно изпращачът и получателят. Използвайте командата nuget, за да инсталирате пакета по следния начин:
При стартиране конфигурирайте метода на услугата ConfigureServices по следния начин:
Можете да посетите уебсайта /cap address, за да видите таблото, както е показано по-долу:
Запазване на данните: Лимит щеАвтоматично създаване"Публикувано" и "Получено" са две локални таблици в базата данни
CREATE TABLE [кап]. [Публикувано] ( [Id] [bigint] НЕ НУЛЕВО, [Версия] [нварчар] (20) НЕ НУЛЕВО, [Име] [нварчар] (200) НЕ НУЛЕВО, [Съдържание] [нварчар] (макс) NULL, [Отстъпва] [инт] НЕ НУЛЕВО, [Добавено] [datetime 2] (7) НЕ НУЛЕВО, [Изтича] [datetime 2] (7) NULL, [StatusName] [нварчар] (50) НЕ НУЛЕВО, ОГРАНИЧЕНИЕ [PK_cap. Публикувано] ПЪРВИЧЕН КЛЮЧ КЛЪСТЕРИРАН
( [Id] ASC )С (PAD_INDEX = ИЗКЛЮЧЕНО, STATISTICS_NORECOMPUTE = ИЗКЛЮЧЕНО, IGNORE_DUP_KEY = ИЗКЛЮЧЕНО, ALLOW_ROW_LOCKS = ВКЛЮЧЕНО, ALLOW_PAGE_LOCKS = ВКЛЮЧЕНО) НА [ОСНОВНО] ) НА [ПЪРВИЧНА] TEXTIMAGE_ON [ПЪРВИЧНА] ВЪРВИ CREATE TABLE [кап]. [Получено] ( [Id] [bigint] НЕ НУЛЕВО, [Версия] [нварчар] (20) НЕ НУЛЕВО, [Име] [нварчар] (200) НЕ НУЛЕВО, [Група] [нварчар] (200) NULL, [Съдържание] [нварчар] (макс) NULL, [Отстъпва] [инт] НЕ НУЛЕВО, [Добавено] [datetime 2] (7) НЕ НУЛЕВО, [Изтича] [datetime 2] (7) NULL, [StatusName] [нварчар] (50) НЕ НУЛЕВО, ОГРАНИЧЕНИЕ [PK_cap. Получено] ПЪРВИЧЕН КЛЮЧ КЛЪСТЕРИРАН
( [Id] ASC )С (PAD_INDEX = ИЗКЛЮЧЕНО, STATISTICS_NORECOMPUTE = ИЗКЛЮЧЕНО, IGNORE_DUP_KEY = ИЗКЛЮЧЕНО, ALLOW_ROW_LOCKS = ВКЛЮЧЕНО, ALLOW_PAGE_LOCKS = ВКЛЮЧЕНО) НА [ОСНОВНО] ) НА [ПЪРВИЧНА] TEXTIMAGE_ON [ПЪРВИЧНА] ВЪРВИ
Методът на контролера HomeController е следният:
Когато потребителят се регистрира успешно, ще бъдат изпратени 3 съобщения с различни теми и след това абонатът ще ги погълне.
Когато CAP започне, ще създаде стандартна потребителска група, ако няколко потребители от една и съща потребителска група консумират едно и също тематично съобщение,Ще бъде изпълнен само един потребител。 НапротивАко потребителите са в различни потребителски групи, всички потребители са екзекутирани。
Създаването на нов проект за .NET Core конзола, като абонат (потребител) или позоваване на пакета, таблото може да бъде игнорирано.
Ако е в контролера, добавете [CapSubscribe("")] директно, за да се абонирате за съответните съобщения.
Ако методът ви не е в Controller, тогава класът, към който се абонирате, трябва да наследи ICapSubscribe и след това да добави таг [CapSubscribe("")]. Кодът е следният:
Отворете абонаментния клиент и опитайте да получите достъп до http://localhost:28116/Home/UserRegister за изпращане на съобщения, ефектът е следният:
И конзолата, и приемникът на контролера се задействат, както е показано на фигурата по-долу:
Опитайте да хвърлите изключение ръчно в метода за получаване на съобщение, кодът е следният:
CAP автоматично ще опита метода отново,Броят на повторните опити след провал е 50 по подразбиране, а интервалът за повторни опити след неуспех е 60 секунди по подразбиране, както е показано на фигурата по-долу:
Рамката не може да бъде 100% сигурна, че съобщението се изпълнява само веднъжЗатова, в някои ключови сценарии, страната на съобщенията обръща внимание на бизнес дедупликацията в процеса на имплементация на метода.
Накрая, прикачете изходния код:
Туристи, ако искате да видите скритото съдържание на този пост, моля Отговор
|