Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 57382|Ответ: 3

[ASP.NET] ASP.NET Core (пять) основана на распределённых транзакциях с CAP

[Скопировать ссылку]
Опубликовано 17.03.2021 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 Core (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 installation tutorial under 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 [cap]. [Опубликовано] (
        [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 [cap]. [Получено] (
        [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("")] напрямую, чтобы подписаться на соответствующие сообщения.

Если ваш метод отсутствует в контроллере, то класс, на который вы подписываетесь, должен унаследовать ICapSubscribe и добавить тег [CapSubscribe("")].

Код таков:

Откройте клиент подписки и попробуйте получить доступ к http://localhost:28116/Home/UserRegister для отправки сообщений, эффект выглядит следующим образом:



И консоль, и приемник контроллера активируются, как показано на рисунке ниже:



Попробуйте вручную выбросить исключение в методе получения сообщения, код выглядит следующим образом:

CAP автоматически повторит этот метод,Количество повторных попыток после неудачи по умолчанию составляет 50, а интервал повторных попыток после неудачи — 60 секунд, как показано на рисунке ниже:



Фреймворк не может быть на 100% уверен, что сообщение выполняется только один разПоэтому в некоторых ключевых случаях сторона сообщения уделяет внимание бизнес-дедупликации в процессе реализации метода.

Вопросы идемпотентности интерфейсов
https://www.itsvse.com/thread-6010-1-1.html

Наконец, приложите исходный код:

Туристы, если вы хотите увидеть скрытое содержание этого поста, пожалуйстаОтвет






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

Mail To:help@itsvse.com