CAP-periaatteet
CAP-periaate, joka tunnetaan myös nimellä CAP-lause, viittaa johdonmukaisuuteen, saatavuuteen ja ositussietokykyyn hajautetussa järjestelmässä. CAP-periaate sanoo, että nämä kolme elementtiä voivat saavuttaa vain kaksi pistettä samanaikaisesti.On mahdotonta ottaa kaikkia kolmea yhtä aikaa。
CAP-periaatteen ydin on joko AP, CP tai AC, mutta CAP:ta ei ole. Jos hajautetussa järjestelmässä ei ole kopioita datasta, järjestelmän on täytettävä vahvan johdonmukaisuuden ehto, koska dataa on vain yksikäsitteinen, eikä datan epäjohdonmukaisuutta ole. Tällöin ovat kaksi alkiota C ja P, mutta jos järjestelmässä on verkkoosion ehto tai käyttökatko, se johtaa väistämättä siihen, että osa datasta ei ole saavutettavissa, eikä saatavuusehtoa voida täyttää, eli CP-järjestelmä saadaan tässä tapauksessa, muttaCAP:ta ei voida täyttää samanaikaisesti。
Arvostelu:
DotNetCore.CAP
CAP on tapahtumaväylä ja toteutus hajautetussa järjestelmässä (SOA, MicroService).Lopullinen johdonmukaisuus(Distributed Transactions) on avoimen lähdekoodin C#-kirjasto, joka on kevyt, suorituskykyinen ja helppokäyttöinen.
GitHub-osoite:Hyperlinkin kirjautuminen on näkyvissä.
Dotnet CAP sisältää kaikki Event Busin ominaisuudet, ja CAP tarjoaa virtaviivaisemman tavan hoitaa julkaiseminen ja tilaaminen EventBusissa.
MediatR on prosessissa toimiva viestien tilaus- ja julkaisukehys, joka tarjoaa Send-menetelmän julkaisemiseen yhdelle käsittelijälle ja Publish -menetelmän useille käsittelijöille, mikä on erittäin kätevää käyttää. Tällä hetkellä .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 ja muita versioita, joita voi käyttää eri alustoilla.
ASP.NET Core käyttää MediatR-välimallia
https://www.itsvse.com/thread-9272-1-1.html Arkkitehtuurin esikatselu
CAP tukee viestijonoja kuten Kafka, RabbitMQ, AzureServiceBus, AmazonSQS jne., ja CAP tarjoaa laajennuksia Sql Serverille, MySQL:lle, PostgreSQL:lle ja MongoDB:lle tietokantatallennuksena.
Tässä artikkelissa käytetään RabbitMQ:ta ja SQL Serveriä viestijonoina ja tallennustilana.
Asenna RabbitMQ
Tarkat asennusohjeet löytyvät osoitteesta:
Tilin lisääminen on myös jätetty pois, katso seuraavaa:
Lisäsin testitilin ja rajoitin virtuaalihostit itse, kuten alla näkyy:
Muuten virhe on seuraava:
ACCESS_REFUSED - Kirjautuminen evättiin tunnistautumismekanismilla PLAIN. Lisätietoja löytyy välittäjälokitiedostosta.
Yksikään määritellyistä päätepisteistä ei ollut saavutettavissa
.NET Core integroi CAP:n
Luo ensin uusi ASP.NET Core -projekti, joka toimii sekä lähettäjänä että vastaanottajana. Käytä nuget-komentoa asentaaksesi paketin näin:
Käynnistyksessä konfiguroi palvelumenetelmä ConfigureServices seuraavasti:
Voit vierailla verkkosivulla /cap-osoite nähdäksesi kojelaudan alla esitetyn näkökulmasta:
Datan pysyvyys: CapAutomaattinen luominen"Julkaistu" ja "Vastaanotettu" ovat kaksi paikallista tietokantataulukkoa
LUO TAULUKKO [cap]. [Julkaistu] ( [Id] [bigint] EI MITÄÄN, [Versio] [nvarchar] (20) EI NOLLA, [Nimi] [nvarchar] (200) EI NOLLA, [Sisältö] [nvarchar] (max) NOLLA, [Toistaa] [int] EI MITÄÄN, [Lisätty] [datetime2] (7) EI NOLLA, [Kuolee At] [datetime2] (7) NULL, [StatusNimi] [nvarchar] (50) EI NOLLA, RAJOITUS [PK_cap. Julkaistu] ENSISIJAINEN AVAIN KLUSTEROITU
( [Id] ASC )KUN (PAD_INDEX = POIS PÄÄLTÄ, STATISTICS_NORECOMPUTE = POIS PÄÄLTÄ, IGNORE_DUP_KEY = POIS PÄÄLTÄ, ALLOW_ROW_LOCKS = PÄÄLLÄ, ALLOW_PAGE_LOCKS = PÄÄLLÄ) [PRIMÄÄRISSÄ] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] MENE LUO TAULUKKO [cap]. [Vastaanotettu] ( [Id] [bigint] EI MITÄÄN, [Versio] [nvarchar] (20) EI NOLLA, [Nimi] [nvarchar] (200) EI NOLLA, [Ryhmä] [nvarchar] (200) NULL, [Sisältö] [nvarchar] (max) NOLLA, [Toistaa] [int] EI MITÄÄN, [Lisätty] [datetime2] (7) EI NOLLA, [Kuolee At] [datetime2] (7) NULL, [StatusNimi] [nvarchar] (50) EI NOLLA, RAJOITUS [PK_cap. Vastaanotettu] ENSISIJAINEN AVAIN KLUSTEROITU
( [Id] ASC )KUN (PAD_INDEX = POIS PÄÄLTÄ, STATISTICS_NORECOMPUTE = POIS PÄÄLTÄ, IGNORE_DUP_KEY = POIS PÄÄLTÄ, ALLOW_ROW_LOCKS = PÄÄLLÄ, ALLOW_PAGE_LOCKS = PÄÄLLÄ) [PRIMÄÄRISSÄ] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] MENE
HomeController-ohjainmenetelmä on seuraava:
Kun käyttäjä rekisteröityy onnistuneesti, lähetetään 3 eri aiheesta kertovaa viestiä, ja tilaaja käyttää ne.
Kun CAP käynnistyy, se luo oletuskuluttajaryhmän, jos useampi saman kuluttajaryhmän kuluttaja käyttää samaa aiheviestiä,Vain yksi kuluttaja teloitetaan。 Päinvastoin,Jos kuluttajat ovat eri kuluttajaryhmissä, kaikki kuluttajat teloitetaan。
Uuden .NET Core -konsoliprojektin luominen tilaajana (kuluttajana) tai pakettiin viittaaminen, hallintapaneeli voidaan jättää huomiotta.
Jos se on Controllerissa, lisää suoraan [CapSubscribe("")] tilataksesi asiaankuuluvat viestit.
Jos metodisi ei ole Controllerissa, tilaamasi luokan täytyy periä ICapSubscribe ja lisätä [CapSubscribe("")] -tunniste. Koodi on seuraava:
Avaa tilausasiakasohjelma ja yritä päästä käsiksi http://localhost:28116/Home/UserRegister lähettääksesi viestejä, vaikutus on seuraava:
Sekä konsoli että ohjaimen vastaanotin aktivoituvat, kuten alla olevassa kuvassa näkyy:
Yritä heittää poikkeus manuaalisesti vastaanottoviestimenetelmään, koodi on seuraava:
CAP kokeilee menetelmää automaattisesti uudelleen,Epäonnistumisen jälkeisten uudelleenyritysten määrä on oletuksena 50, ja epäonnistumisen jälkeinen uusintaväli on oletuksena 60 sekuntia, kuten alla olevassa kuvassa näkyy:
Kehys ei voi olla täysin varma, että viesti suoritetaan vain kerranSiksi joissakin keskeisissä tilanteissa viestipuoli kiinnittää huomiota liiketoiminnan duplikointiin menetelmän toteutuksessa.
Lopuksi liitä lähdekoodi:
Turistit, jos haluatte nähdä tämän postauksen piilotetun sisällön, olkaa hyvä Vastaus
|