Principes de la PAC
Le principe CAP, également connu sous le nom de théorème CAP, fait référence à la cohérence, à la disponibilité et à la tolérance de partition dans un système distribué. Le principe PAC stipule que ces trois éléments ne peuvent atteindre que deux points simultanément.Il est impossible de prendre les trois en même temps。
L’essence du principe de la PAC est soit l’AP, la CP ou la CA, mais il n’existe pas de CAP. S’il n’y a pas de copie des données dans un système distribué, alors le système doit remplir la condition de forte cohérence, car il n’y a qu’une seule donnée unique, il n’y aura pas d’incohérence des données, à ce moment-là les deux éléments C et P sont présents, mais si le système a une condition de partition réseau ou un temps d’arrêt, cela conduira inévitablement à ce que certaines données deviennent inaccessibles, et la condition de disponibilité ne peut pas être remplie, c’est-à-dire que le système CP est obtenu dans ce cas, maisLa PAC ne peut pas être satisfaite en même temps。
Révision:
DotNetCore.CAP
CAP est un bus d’événements et une implémentation dans un système distribué (SOA, MicroService).Constance finale(Distributed Transactions) est une bibliothèque C# open source légère, haute performance et facile à utiliser.
Adresse GitHub :La connexion hyperlientérée est visible.
Dotnet CAP dispose de toutes les fonctionnalités d’Event Bus, et CAP offre une manière plus fluide de gérer la publication/l’abonnement dans EventBus.
MediatR est un cadre d’abonnement et de publication de messages en cours qui fournit la méthode Send pour publier sur un seul gestionnaire et la méthode Publish pour publier sur plusieurs handlers, ce qui est très pratique à utiliser. Actuellement, .NET Framework 4.5, . NET Stardand1.3、. NET Stardand 2.0 et d’autres versions, qui peuvent être utilisées sur plusieurs plateformes.
ASP.NET Core utilise le modèle intermédiaire MediatR
https://www.itsvse.com/thread-9272-1-1.html Aperçu de l’architecture
CAP prend en charge les files d’attente de messages telles que Kafka, RabbitMQ, AzureServiceBus, AmazonSQS, etc., et CAP fournit des extensions pour Sql Server, MySql, PostgreSQL et MongoDB en tant que stockage de base de données.
Cet article utilise RabbitMQ et SQL Server comme files d’attente et stockage de messages.
Installer RabbitMQ
Pour des tutoriels d’installation spécifiques, veuillez consulter :
L’ajout d’un compte est également omis, veuillez consulter :
J’ai ajouté moi-même le compte de test et j’ai mis un plafond sur les hôtes virtuels, comme indiqué ci-dessous :
Sinon, l’erreur sera la suivante :
ACCESS_REFUSED - La connexion a été refusée via le mécanisme d’authentification PLAIN. Pour plus de détails, voir le fichier de journal du courtier.
Aucun des points de terminaison spécifiés n’était accessible
.NET Core intègre CAP
D’abord, créez un nouveau projet ASP.NET Core qui soit à la fois l’émetteur et le récepteur. Utilisez la commande nuget pour installer le package ainsi :
Au démarrage, configurez la méthode de service ConfigureServices comme suit :
Vous pouvez visiter le site web / adresse de la limite pour consulter le tableau de bord comme montré ci-dessous :
Persistance des données : CapCréation automatique« Publié » et « Reçu » sont deux tables de bases de données locales
CRÉER TABLEAU [cap]. [Publié] ( [ID] [bigint] PAS NULLE, [Version] [nvarchar] (20) NON NUL, [Nom] [nvarchar] (200) NON NULLE, [Contenu] [nvarchar] (max) NULL, [Rétracte] [int] PAS NULLE, [Ajouté] [datetime2] (7) NON NULLE, [Expire] [datetime2] (7) NULL, [NomDeStatut] [nvarchar] (50) NON NULLE, CONTRAINTE [PK_cap. [PUBLIÉ] CLUSTER DE CLÉ PRIMAIRE
( [Id] ASC )AVEC (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) SUR [PRIMAIRE] ) SUR [PRIMAIRE] TEXTIMAGE_ON [PRIMAIRE] GO CRÉER TABLEAU [cap]. [Reçu] ( [ID] [bigint] PAS NULLE, [Version] [nvarchar] (20) NON NUL, [Nom] [nvarchar] (200) NON NULLE, [Groupe] [nvarchar] (200) NULL, [Contenu] [nvarchar] (max) NULL, [Rétracte] [int] PAS NULLE, [Ajouté] [datetime2] (7) NON NULLE, [Expire] [datetime2] (7) NULL, [NomDeStatut] [nvarchar] (50) NON NULLE, CONTRAINTE [PK_cap. [REÇU REÇU] CLÉ PRIMAIRE REGROUPÉE
( [Id] ASC )AVEC (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) SUR [PRIMAIRE] ) SUR [PRIMAIRE] TEXTIMAGE_ON [PRIMAIRE] GO
La méthode du contrôleur HomeController est la suivante :
Lorsque l’utilisateur s’inscrit avec succès, 3 messages sur des sujets différents seront envoyés, puis l’abonné les consommera.
Lorsque la CAP commencera, elle créera un groupe de consommateurs par défaut, si plusieurs consommateurs du même groupe consomment le même message thématique,Un seul consommateur sera exécuté。 Au contraireSi les consommateurs appartiennent tous à des groupes différents, tous les consommateurs sont exécutés。
Créer un nouveau projet console .NET Core, en tant qu’abonné (consommateur), ou référencer le paquet, peut être ignoré.
Si elle est dans le contrôleur, ajoutez [CapSubscribe(« »)] directement pour vous abonner aux messages concernés.
Si votre méthode n’est pas dans le contrôleur, alors la classe à laquelle vous vous abonnez doit hériter d’ICapSubscribe puis ajouter le tag [CapSubscribe(« »)]. Le code est le suivant :
Ouvrez le client d’abonnement et essayez d’accéder à http://localhost:28116/Home/UserRegister pour envoyer des messages, l’effet est le suivant :
La console et le récepteur de la manette sont tous deux déclenchés, comme montré dans la figure ci-dessous :
Essayez de lancer manuellement une exception dans la méthode du message récepteur, le code est le suivant :
CAP réessaiera automatiquement la méthode,Le nombre de tentatives après échec est de 50 par défaut, et l’intervalle de tentative après échec est de 60 secondes par défaut, comme montré dans la figure ci-dessous :
Le framework ne peut pas être sûr à 100 % que le message n’est exécuté qu’une seule foisAinsi, dans certains scénarios clés, le côté message accorde une attention à la déduplication métier lors de la mise en œuvre de la méthode.
Enfin, joignez le code source :
Touristes, si vous voulez voir le contenu caché de ce post, s’il vous plaît Répondre
|