Principi CAP
Il principio CAP, noto anche come teorema CAP, si riferisce alla coerenza, alla disponibilità e alla tolleranza di partizione in un sistema distribuito. Il principio CAP afferma che questi tre elementi possono ottenere solo due punti contemporaneamente.È impossibile prendere tutte e tre le cose contemporaneamente。
L'essenza del principio CAP è AP, CP o AC, ma non esiste CAP. Se non c'è una copia dei dati in un sistema distribuito, allora il sistema deve soddisfare la forte condizione di coerenza, poiché esiste solo un dato unico, non ci sarà incoerenza nei dati; in questo momento sono presenti i due elementi C e P, ma se il sistema ha una condizione di partizione di rete o un tempo di inattività, ciò porterà inevitabilmente a un certo dato inaccessibile e la condizione di disponibilità non può essere soddisfatta, cioè in questo caso il sistema CP viene ottenuto, maIl CAP non può essere soddisfatto allo stesso tempo。
Recensione:
DotNetCore.CAP
CAP è un bus eventi e un'implementazione in un sistema distribuito (SOA, MicroService).Costanza finale(Distributed Transactions) è una libreria C# open-source che è leggera, ad alte prestazioni e facile da usare.
Indirizzo GitHub:Il login del link ipertestuale è visibile.
Dotnet CAP ha tutte le funzionalità di Event Bus, e CAP offre un modo più snello per gestire la pubblicazione/abbonamento in EventBus.
MediatR è un framework di abbonamento e pubblicazione di messaggi in processo che fornisce il metodo Send per pubblicare su un singolo handler e il metodo Publish per pubblicare su più handler, molto comodo da usare. Attualmente, .NET Framework 4.5, . NET Stardand1.3、. NET Stardand 2.0 e altre versioni, che possono essere utilizzate su più piattaforme.
ASP.NET Core utilizza il modello intermedio MediatR
https://www.itsvse.com/thread-9272-1-1.html Anteprima architetturale
CAP supporta code di messaggi come Kafka, RabbitMQ, AzureServiceBus, AmazonSQS, ecc., e CAP fornisce estensioni per Sql Server, MySql, PostgreSQL e MongoDB come archiviazione di database.
Questo articolo utilizza RabbitMQ e SQL Server come code e archiviazione dei messaggi.
Installa RabbitMQ
Per tutorial specifici sull'installazione, si prega di fare riferimento:
L'aggiunta di un account è anche omessa, si prega di fare riferimento:
Ho aggiunto io stesso l'account di test e il limite agli host virtuali, come mostrato qui sotto:
Altrimenti, l'errore sarà il seguente:
ACCESS_REFUSED - L'accesso è stato rifiutato usando il meccanismo di autenticazione PLAIN. Per i dettagli consulta il file di registro del broker.
Nessuno degli endpoint specificati era raggiungibile
.NET Core integra CAP
Per prima cosa, crea un nuovo progetto ASP.NET Core che sia sia il mittente che il ricevitore. Usa il comando nuget per installare il pacchetto così:
All'avvio, configura il metodo di servizio ConfigureServices come segue:
Puoi visitare il sito web /cap address per visualizzare il cruscotto come mostrato di seguito:
Persistenza dei dati: Cap willCreazione automatica"Pubblicato" e "Ricevuto" sono due tabelle di database locali
CREATE TABLE [cap]. [Pubblicato] ( [Id] [bigint] NON NULLO, [Versione] [nvarchar] (20) NON NULLA, [Nome] [nvarchar] (200) NON NULLO, [Contenuto] [nvarchar] (max) NULL, [Ripeti] [int] NON NULLO, [Aggiunto] [datetime2] (7) NON NULLO, [Scadenza] [datetime2] (7) NULLO, [NomeStato] [nvarchar] (50) NON NULLO, VINCOLO [PK_cap. [PUBBLICATO] CLUSTER DI CHIAVE PRIMARIA
( [Id] ASC )CON (PAD_INDEX = SPENTO, STATISTICS_NORECOMPUTE = SPENTE, IGNORE_DUP_KEY = SPENTE, ALLOW_ROW_LOCKS = ACCESO, ALLOW_PAGE_LOCKS = ACCESO) ACCESO [PRIMARIO] ) SU [PRIMARIA] TEXTIMAGE_ON [PRIMARIA] VAI CREATE TABLE [cap]. [Ricevuto] ( [Id] [bigint] NON NULLO, [Versione] [nvarchar] (20) NON NULLA, [Nome] [nvarchar] (200) NON NULLO, [Gruppo] [nvarchar] (200) NULLO, [Contenuto] [nvarchar] (max) NULL, [Ripeti] [int] NON NULLO, [Aggiunto] [datetime2] (7) NON NULLO, [Scadenza] [datetime2] (7) NULLO, [NomeStato] [nvarchar] (50) NON NULLO, VINCOLO [PK_cap. [Ricevuto] CHIAVE PRIMARIA CLUSTERIZZATA
( [Id] ASC )CON (PAD_INDEX = SPENTO, STATISTICS_NORECOMPUTE = SPENTE, IGNORE_DUP_KEY = SPENTE, ALLOW_ROW_LOCKS = ACCESO, ALLOW_PAGE_LOCKS = ACCESO) ACCESO [PRIMARIO] ) SU [PRIMARIA] TEXTIMAGE_ON [PRIMARIA] VAI
Il metodo del controller HomeController è il seguente:
Quando l'utente si registra con successo, verranno inviati 3 messaggi con argomenti diversi, che poi l'abbonato li consumerà.
Quando inizia il CAP, creerà un gruppo di consumatori predefinito, se più consumatori dello stesso gruppo consumano lo stesso messaggio di argomento,Solo un consumatore sarà eseguito。 Al contrario,Se i consumatori appartengono tutti a gruppi diversi, tutti i consumatori sono trattati。
Creando un nuovo progetto console .NET Core, come abbonato (consumatore), o facendo riferimento al pacchetto, la dashboard può essere ignorata.
Se è nel Controller, aggiungi [CapSubscribe("")] direttamente per iscriverti ai messaggi rilevanti.
Se il tuo metodo non è nel Controller, allora la classe a cui sei iscritto deve ereditare ICapSubscribe e poi aggiungere il tag [CapSubscribe("")]. Il codice è il seguente:
Apri il client in abbonamento e prova ad accedere http://localhost:28116/Home/UserRegister per inviare messaggi, l'effetto è il seguente:
Sia la console che il ricevitore del controller vengono attivati, come mostrato nella figura sottostante:
Prova a lanciare manualmente un'eccezione nel metodo del messaggio ricevente, il codice è il seguente:
CAP riproverà automaticamente il metodo,Il numero di tentativi dopo il fallimento è 50 di default, e l'intervallo di ritentativi dopo il fallimento è di 60 secondi di default, come mostrato nella figura sottostante:
Il framework non può essere sicuro al 100% che il messaggio venga eseguito solo una voltaPertanto, in alcuni scenari chiave, il lato del messaggio presta attenzione alla deduplicazione aziendale nel processo di implementazione del metodo.
Infine, allega il codice sorgente:
Turisti, se volete vedere il contenuto nascosto di questo post, vi prego Risposta
|