Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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 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 для додавання account information
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,
        [Відступає] [інтелект] НЕ НУЛЬ,
        [Додано] [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% впевнений, що повідомлення виконується лише один разТому в деяких ключових сценаріях сторона повідомлення звертає увагу на дедуплікацію бізнесу під час реалізації методу.

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

Нарешті, додайте вихідний код:

Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласкаВідповідь






Попередній:CSV-онлайн-конвертація синтаксису Markdown
Наступний:HttpClient POST безпосередньо для надсилання запитів на стиснення байтових байтів (gzip)
Опубліковано 2021-3-18 18:11:20 |
Приходьте подивіться, дякую, що поділилися
Опубліковано 2021-9-22 20:42:18 |
Навчися вчитися...
Опубліковано 2021-12-31 15:08:21 |
Навчання
Дуже добре, дуже гарно
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com