Принципи 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, [Відступає] [інтелект] НЕ НУЛЬ, [Додано] [datetime2] (7) НЕ НУЛЬ, [Термін дії] [datetime2] (7) NULL, [StatusName] [нварчар] (50) НЕ НУЛЬ, ОБМЕЖЕННЯ [PK_cap. Опубліковано] КЛАСТЕРИЗОВАНИЙ ПЕРВИННИЙ КЛЮЧ
( [Id] ASC )З (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) НА [PRIMARY] ) НА [ПЕРВИННІ] TEXTIMAGE_ON [ПЕРВИННІ] ІДИ CREATE TABLE [cap]. [Отримано] ( [Id] [bigint] НЕ НУЛЬ, [Версія] [нварчар] (20) НЕ НУЛЬ, [Ім'я] [нварчар] (200) НЕ НУЛЬ, [Група] [нварчар] (200) NULL, [Зміст] [нварчар] (макс) NULL, [Відступає] [інтелект] НЕ НУЛЬ, [Додано] [datetime2] (7) НЕ НУЛЬ, [Термін дії] [datetime2] (7) NULL, [StatusName] [нварчар] (50) НЕ НУЛЬ, ОБМЕЖЕННЯ [PK_cap. Отримано] ПЕРВИННИЙ КЛЮЧ КЛАСТЕРИЗОВАНИЙ
( [Id] ASC )З (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) НА [PRIMARY] ) НА [ПЕРВИННІ] TEXTIMAGE_ON [ПЕРВИННІ] ІДИ
Метод контролера HomeController виглядає так:
Коли користувач успішно зареєструється, буде надіслано 3 повідомлення з різними темами, після чого підписник їх споживає.
Коли CAP запускається, він створює групу споживачів за замовчуванням, якщо кілька споживачів однієї й тієї ж групи споживають одне й те саме тематичне повідомлення,Буде виконано лише один споживач。 Навпаки,Якщо споживачі належать до різних груп споживачів, усі споживачі страчуються。
Створюючи новий проєкт консолі .NET Core, як абонент (споживач) або посилаючись на пакет, панель керування можна ігнорувати.
Якщо він знаходиться в контролері, додайте [CapSubscribe("")] напряму, щоб підписатися на відповідні повідомлення.
Якщо ваш метод не знаходиться в контролері, тоді клас, на який ви підписуєтеся, має успадкувати ICapSubscribe і додати тег [CapSubscribe("")]. Код виглядає так:
Відкрийте підписний клієнт і спробуйте отримати доступ до http://localhost:28116/Home/UserRegister для надсилання повідомлень, результат виглядає так:
І консоль, і приймач контролера активуються, як показано на рисунку нижче:
Спробуйте вручну кинути виняток у методі отримання повідомлення, код виглядає так:
CAP автоматично повторить цей метод,Кількість повторних спроб після невдачі за замовчуванням становить 50, а інтервал повторних спроб після невдачі — 60 секунд за замовчуванням, як показано на рисунку нижче:
Фреймворк не може бути на 100% впевнений, що повідомлення виконується лише один разТому в деяких ключових сценаріях сторона повідомлення звертає увагу на дедуплікацію бізнесу під час реалізації методу.
Нарешті, додайте вихідний код:
Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласка Відповідь
|