Принципы 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 [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% уверен, что сообщение выполняется только один разПоэтому в некоторых ключевых случаях сторона сообщения уделяет внимание бизнес-дедупликации в процессе реализации метода.
Наконец, приложите исходный код:
Туристы, если вы хотите увидеть скрытое содержание этого поста, пожалуйста Ответ
|