CAP ilkeleri
CAP ilkesi, CAP teoremi olarak da bilinir ve dağıtık bir sistemdeki tutarlılık, kullanılabilirlik ve bölünme toleransını ifade eder. CAP ilkesi, bu üç unsurun aynı anda yalnızca iki puana ulaşabileceğini belirtir.Üçünü aynı anda almak imkansız。
CAP ilkesinin özü ya AP, CP ya da AC'dir, ancak CAP yoktur. Dağıtık bir sistemde verinin kopyası yoksa, sistem güçlü tutarlılık koşulunu karşılamalıdır, çünkü sadece benzersiz bir veri vardır, veri tutarsızlığı olmaz, bu noktada C ve P elemanları mevcuttur, ancak sistemde ağ bölümleme koşulu veya kesinti varsa, kaçınılmaz olarak bazı verilerin erişilemeyeceğine yol açar ve erişilebilirlik koşulu karşılanamaz, yani bu durumda CP sistemi elde edilir, ancakCAP aynı anda tatmin edilemez。
Eleştiri:
DotNetCore.CAP
CAP, dağıtık bir sistemde (SOA, MicroService) bir olay veri yolu ve uygulamasıdır.Son Tutarlılık(Dağıtık İşlemler), hafif, yüksek performanslı ve kullanımı kolay olan açık kaynaklı bir C# kütüphanesidir.
GitHub adresi:Bağlantı girişi görünür.
Dotnet CAP, Event Bus'ın tüm özelliklerine sahiptir ve CAP, EventBus'ta yayın yapma/abonelik işlemlerini daha kolaylaştıran bir yol sunar.
MediatR, tek bir işleyiciye yayınlama için Send yöntemi ve birden fazla işleyiciye yayınlama için Publish yöntemi sunan süreç içi mesaj aboneliği ve yayınlama çerçevesidir; bu da kullanımı oldukça kullanışlıdır. Şu anda, .NET Framework4.5, . NET Stardand1.3、. NET Stardand 2.0 ve diğer sürümler, bu sürümler platformlar arasında kullanılabiliyor.
ASP.NET Core, MediatR aracı modelini kullanır
https://www.itsvse.com/thread-9272-1-1.html Mimari önizleme
CAP, Kafka, RabbitMQ, AzureServiceBus, AmazonSQS gibi mesaj kuyruklarını destekler ve veritabanı depolama olarak Sql Server, MySql, PostgreSQL ve MongoDB için uzantılar sağlar.
Bu makale, mesaj kuyrukları ve depolama olarak RabbitMQ ve SQL Server'ı kullanır.
RabbitMQ'yu Yükle
Özel kurulum eğitimleri için lütfen şu adrese bakınız:
Hesap eklemek de göz ardı edilmiş, lütfen şu adrese bakınız:
Test hesabını ekledim ve Sanal Hostları sınırlandırdım, aşağıda gösterildiği gibi:
Aksi takdirde, hata şu şekilde olur:
ACCESS_REFUSED - Kimlik doğrulama mekanizması PLAIN'le giriş reddedildi. Detaylar için broker log dosyasına bakınız.
Belirtilen uç noktaların hiçbiri ulaşılamıyordu
.NET Core CAP entegre eder
İlk olarak, hem gönderici hem de alıcı olan yeni bir ASP.NET Core projesi oluşturun. Paketi şu şekilde kurmak için nuget komutunu kullanın:
Başlangıçta, ConfigureServices hizmet yöntemini aşağıdaki şekilde yapılandırın:
Gösterge panelini aşağıda gösterildiği gibi görmek için web sitesi/cap adresini ziyaret edebilirsiniz:
Veri kalıcılığı: CapOtomatik oluşturma"Yayınlanan" ve "Alınan" iki yerel veritabanı tablosudur
TABLO OLUŞTUR [cap]. [Yayınlandı] ( [Id] [büyük ses] BOŞ DEĞIL, [Versiyon] [nvarchar] (20) BOŞ DEĞIL, [İsim] [nvarchar] (200) BOŞ DEĞİL, [İçerik] [nvarchar] (max) NULL, [Tekrar Atıyor] [int] BOŞ DEĞIL, [Eklendi] [datetime2] (7) GEÇERSIZ DEĞIL, [Süresi doluyor] [datetime2] (7) NULL, [DurumAdı] [nvarchar] (50) BOŞ DEĞİL, KISITLAMA [PK_cap. Yayınlandı] BIRINCIL ANAHTAR KÜMELENMIŞ
( [Id] ASC )(PAD_INDEX = KAPALI, STATISTICS_NORECOMPUTE = KAPALI, IGNORE_DUP_KEY = KAPALI, ALLOW_ROW_LOCKS = AÇIK, ALLOW_PAGE_LOCKS = AÇIK) ILE [PRIMERARY] ) ON [ILKOKUL] TEXTIMAGE_ON [ÖNCEK] GIT TABLO OLUŞTUR [cap]. [Alındı] ( [Id] [büyük ses] BOŞ DEĞIL, [Versiyon] [nvarchar] (20) BOŞ DEĞIL, [İsim] [nvarchar] (200) BOŞ DEĞİL, [Grup] [nvarchar] (200) NULL, [İçerik] [nvarchar] (max) NULL, [Tekrar Atıyor] [int] BOŞ DEĞIL, [Eklendi] [datetime2] (7) GEÇERSIZ DEĞIL, [Süresi doluyor] [datetime2] (7) NULL, [DurumAdı] [nvarchar] (50) BOŞ DEĞİL, KISITLAMA [PK_cap. Alındı] BIRINCIL ANAHTAR KÜMELENMIŞ
( [Id] ASC )(PAD_INDEX = KAPALI, STATISTICS_NORECOMPUTE = KAPALI, IGNORE_DUP_KEY = KAPALI, ALLOW_ROW_LOCKS = AÇIK, ALLOW_PAGE_LOCKS = AÇIK) ILE [PRIMERARY] ) ON [ILKOKUL] TEXTIMAGE_ON [ÖNCEK] GIT
HomeController kontrolcü yöntemi şöyledir:
Kullanıcı başarılı bir şekilde kayıt yaptırdığında, farklı konulara sahip 3 mesaj gönderilir ve abone bunları tüketir.
CAP başladığında, aynı tüketici grubunun birden fazla tüketicisi aynı konu mesajını tüketiyorsa, varsayılan bir tüketici grubu oluşturur,Sadece bir tüketici icra edilir。 Tam tersine,Tüketiciler farklı tüketici gruplarındaysa, tüm tüketiciler idam edilir。
Yeni bir .NET Core konsol projesi oluşturmak, abone (tüketici) olarak veya pakete referans vermek için dashboard göz ardı edilebilir.
Eğer Kontrolör'deyse, ilgili mesajlara abone olmak için doğrudan [CapSubscribe("")] ekleyin.
Eğer yönteminiz Kontrolör'de değilse, abone olduğunuz sınıf ICapSubscribe'ı devralmalı ve ardından [CapSubscribe("")] etiketini eklemelidir. Kod şöyledir:
Abonelik istemcisini açın ve mesaj göndermek için http://localhost:28116/Home/UserRegister erişmeye çalışın, etki şu şekildedir:
Hem konsol hem de kontrolcü alıcısı tetiklenir, aşağıdaki şekilde gösterilmiştir:
Alıcı mesaj yöntemine manuel olarak bir istisna eklemeyi deneyin, kod şöyledir:
CAP yöntemi otomatik olarak yeniden deneyecek,Başarısızlıktan sonra tekrar deneme sayısı varsayılan olarak 50'dir ve başarısızlıktan sonraki tekrar deneme aralığı varsayılan olarak 60 saniyedir, aşağıdaki şekilde gösterildiği gibi:
Çerçeve, mesajın sadece bir kez yürütüldüğünden %100 emin olamazBu nedenle, bazı önemli senaryolarda, mesaj tarafı, yöntem uygulama sürecinde iş deduplicationuna dikkat eder.
Son olarak, kaynak kodunu ekleyin:
Turistler, bu gönderinin gizli içeriğini görmek isterseniz lütfen Yanıt
|