Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 57382|Отговор: 3

[ASP.NET] ASP.NET Core (пет) се базира на разпределени транзакции с CAP

[Копирай линк]
Публикувано на 2021-3-17 18:12:50 | | | |
Принципи на CAP

Принципът CAP, известен още като теорема за CAP, се отнася до последователността, наличността и толерантността към разпределение в разпределена система. Принципът на CAP гласи, че тези три елемента могат да постигнат само две точки едновременно.Невъзможно е да се вземат и трите едновременно

2PC &&&&3PC разпределени транзакции
https://www.itsvse.com/thread-9591-1-1.html

Същността на принципа на CAP е или AP, CP или AC, но няма CAP. Ако няма копие на данните в разпределена система, тогава системата трябва да изпълни условието за силна консистентност, защото има само уникални данни, няма да има несъответствие в данните, в този момент двата елемента C и P са налице, но ако системата има условие за разделение на мрежата или прекъсване, това неизбежно ще доведе до недостъпност на някои данни и условието за наличност не може да бъде изпълнено, т.е. CP системата се получава в този случай, ноCAP не може да бъде изпълнен едновременно

Преглед:

ASP.NET Филтър Core(4) унифицирана валидация на модела ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Ядро (iii) Динамично създаване на инстанции чрез ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Ядро (2) Рестартиране на приложението чрез код
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) използва кеширане на Redis
https://www.itsvse.com/thread-9393-1-1.html


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

За конкретни уроци по инсталация, моля, вижте с:

【Practical Combat】RabbitMQ инсталационен урок под Windows
https://www.itsvse.com/thread-4630-1-1.html

【Practice】RabbitMQ инсталира плъгина за управление на уеб
https://www.itsvse.com/thread-4631-1-1.html
Добавянето на акаунт също е пропуснато, моля вижте на:

【Practice】rabbitMQ console за добавяне на информация за акаунта
https://www.itsvse.com/thread-4655-1-1.html
Аз сам добавих тестовия акаунт и ограничих виртуалните хостове, както е показано по-долу:



В противен случай грешката ще бъде следната:

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% сигурна, че съобщението се изпълнява само веднъжЗатова, в някои ключови сценарии, страната на съобщенията обръща внимание на бизнес дедупликацията в процеса на имплементация на метода.

Проблеми с идемпотентността на интерфейса
https://www.itsvse.com/thread-6010-1-1.html

Накрая, прикачете изходния код:

Туристи, ако искате да видите скритото съдържание на този пост, моляОтговор






Предишен:CSV онлайн конверсия на синтаксиса на Markdown
Следващ:HttpClient POST директно за изпращане на заявки за компресия на байтови байтове (gzip)
Публикувано на 2021-3-18 18:11:20 |
Елате да видите, благодаря, че споделихте
Публикувано на 22.09.2021 20:42:18 |
Научи се да учиш...
Публикувано на 2021-12-31 15:08:21 |
Учене
Много добре, много хубаво
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com