|
CAP Prensibi
CAP teoremi olarak da bilinen CAP ilkesi, dağıtılmış bir sistemde Tutarlılık, Kullanılabilirlik ve Bölünme toleransını ifade eder.CAP ilkesi, bu üç unsurun üçünün de değil, aynı anda en fazla ikisinin elde edilebileceği anlamına gelir.
Dağıtılmış İşlemler 2PC&&3PC h ttps:// www.itsvse.com/thread-9591-1-1.html CAP ilkesinin özü, AP, CP veya AC'den birinin olması, ancak CAP olmamasıdır. Dağıtılmış bir sistemde verilerin kopyası yoksa, sistem güçlü tutarlılık koşulunu karşılamalıdır, çünkü yalnızca tek bir veri parçası vardır, veri tutarsızlığı olmayacaktır ve şu anda C ve P'nin iki öğesi mevcuttur, ancak sistem bir ağ bölünmesi durumunda veya kesinti durumunda meydana gelirse, bu kesinlikle bazı verilere erişilememesine neden olur ve şu anda kullanılabilirlik koşulu mevcut değildir. erişim, şu anda kullanılabilirlik koşulu karşılanamaz, yani bu durumda CP sistemi elde edilir, ancak CAP aynı anda karşılanamaz.
Gözden geçirin:
ASP.NET Core (IV) Filtre Birleştirme ModelState Model Doğrulama h ttps:// www.itsvse.com/thread-9589-1-1.html
ASP.NET Core (III) ActivatorUtilities ile Dinamik Olarak Örnek Oluşturma h ttps:// www.itsvse.com/thread-9488-1-1.html
ASP.NET Core (II) Kod Aracılığıyla Kendi Kendini Yeniden Başlatan Uygulamalar h ttps:// www.itsvse.com/thread-9480-1-1.html
ASP.NET Core (I) Redis Cache Kullanımı h ttps:// www.itsvse.com/thread-9393-1-1.html
DotNetCore.CAP
CAP, dağıtılmış bir sistemde (SOA, MicroService) bir olay veri yolu ve nihai tutarlılık (dağıtılmış işlemler) uygulayan açık kaynaklı bir C# kütüphanesidir, hafif, yüksek performanslı, kullanımı kolay vb.
GitHub adresi: https: //github.com/dotnetcore/CAP
Dotnet CAP, Event Bus'ın tüm özelliklerine sahiptir ve CAP, EventBus'ta yayınlama/abonelik ile başa çıkmak için daha basitleştirilmiş bir yol sağlar.
MediatR, tek bir işleyiciye yayınlamak için Send yöntemi, birden çok işleyiciye yayınlamak için Publish yöntemi sağlayan, kullanımı çok kolay olan bir işlem içi mesaj aboneliği, yayınlama çerçevesidir. NET Framework4.5, .NET Stardand1.3, .NET Stardand2.0 ve diğer sürümlerin çapraz platform kullanımına uygundur.
MediatR aracı modelini kullanan ASP.NET Core h ttps:// www.itsvse.com/thread-9272-1-1.html Mimari Önizleme
CAP, Kafka, RabbitMQ, AzureServiceBus, AmazonSQS gibi mesaj kuyruklarını destekler. CAP, veritabanı depolaması olarak Sql Server, MySql, PostgreSQL ve MongoDB'ye uzantılar sağlar.
Bu makalede, mesaj kuyruğu ve depolama alanı olarak RabbitMQ ve SQL Server kullanıyoruz.
RabbitMQ Kurulumu
Lütfen kurulum eğitimine bakın:
Windows üzerinde RabbitMQ kurulum eğitimi. h ttps:// www.itsvse.com/thread-4630-1-1.html
RabbitMQ için Web Yönetimi Eklentisinin Kurulumu h ttps:// www.itsvse.com/thread-4631-1-1.html Biraz da hesap ekleyin, lütfen bkz:
[Pratik] Hesap bilgilerini eklemek için RabbitMQ konsolu h ttps:// www.itsvse.com/thread-4655-1-1.html Test hesabını ekledim ve Sanal Ana Bilgisayarları aşağıda gösterildiği gibi kapattım:
Aksi takdirde aşağıdaki gibi bir hata bildirecektir:
ACCESS_REFUSED - Kimlik doğrulama mekanizması PLAIN kullanılarak oturum açma reddedildi. Ayrıntılar için broker günlük dosyasına bakın.
Belirtilen uç noktaların hiçbirine ulaşılamadı NET Core Entegrasyon CAP
İlk olarak, hem gönderici hem de alıcı olan yeni bir ASP.NET Core projesi oluşturun. Nuget komutunu kullanarak aşağıdaki paketleri yükleyin:
Başlangıçta ConfigureServices yöntemi ConfigureServices aşağıdaki gibi yapılandırılır:
Aşağıda gösterildiği gibi kontrol panelini görüntülemek için web sitesine /cap adresinden erişebilirsiniz:
Veri kalıcılığı: Cap otomatik olarak iki yerel veritabanı tablosu "Yayınlandı" ve "Alındı" oluşturacaktır.
CREATE TABLO [cap]. [Yayınlandı]( [Id] [bigint] NULL DEĞİL, [Sürüm] [nvarchar] NULL DEĞİL, [Yayınla]. [Sürüm] [nvarchar](20) NOT NULL, [Ad] [nvarchar](20) [Ad] [nvarchar](200) NOT NULL, [İçerik] [nvarchar](20) [Retries] [int] NOT NULL, [Added] [datetime2 [Added] [datetime2](7) NOT NULL, [ExpiresAt] [datetime2](7) [StatusName] [nvarchar](50) NOT NULL, [StatusName] [nvarchar](50) CONSTRAINT [PK_cap.Published] PRIMARY KEY CLUSTERED ( [Id] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GİT CREATE TABLO [cap]. [Alınan]( [Id] [bigint] NOT NULL, [Version] [nvar] ON [PRIMARY] ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO [Sürüm] [nvarchar](20) NOT NULL, [Ad] [nvarchar](20) [Ad] [nvarchar](200) NOT NULL, [Grup] [nvarchar](20) [Retries] [int] NOT NULL, [Added] [datetime2 [Added] [datetime2](7) NOT NULL, [ExpiresAt] [datetime2](7) [StatusName] [nvarchar](50) NOT NULL, [StatusName] [nvarchar](50) CONSTRAINT [PK_cap.Received] PRIMARY KEY CLUSTERED ( [Id] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GİT
HomeController denetleyici yöntemleri aşağıdaki gibidir:
Bir kullanıcı başarıyla kaydolduğunda, farklı konulara sahip 3 mesaj gönderilir ve bunlar daha sonra aboneler tarafından tüketilir.
CAP başladığında, varsayılan bir tüketici grubu oluşturur, aynı tüketici grubunun birden fazla tüketicisi aynı Konu mesajını tüketirse, yalnızca bir tüketici yürütülür. Tersine, tüketicilerin tümü farklı tüketici gruplarındaysa, tüm tüketiciler yürütülür.
Abonelik tarafı (tüketici tarafı) olarak yeni bir .NET Core konsol projesi oluşturun, hala yeni oluşturduğunuz pakete referans verin ve gösterge tablosu göz ardı edilebilir.
Controller içindeyse, ilgili mesajlara abone olmak için doğrudan [CapSubscribe("")] ekleyin.
Metodunuz Controller'da yer almıyorsa, abone olacağınız sınıfın ICapSubscribe'ı miras alması ve ardından [CapSubscribe("")] etiketini eklemesi gerekir. Kod aşağıdaki gibidir:
Abonelik istemcisini açın ve bir mesaj göndermek için http://localhost:28116/Home/UserRegister adresini ziyaret etmeye çalışın, sonuç aşağıda gösterilmiştir:
Hem konsolun hem de kontrol ünitesinin alıcı tarafı aşağıda gösterildiği gibi tetiklenir:
Aşağıdaki kod ile receive message yönteminde istisnayı manuel olarak atmayı deneyin:
cap, yöntemi otomatik olarak yeniden denememize yardımcı olacaktır, başarısızlıktan sonra yeniden deneme sayısı, varsayılan 50 ve başarısızlıktan sonra yeniden denemeler arasındaki aralık, varsayılan 60 saniye, aşağıdaki gibidir:
Çerçeve, mesajın yalnızca bir kez yürütülmesini sağlamak için% 100 yapamaz, bu nedenle bazı önemli senaryolarda mesaj tarafı, iş vurgusuna kendi dikkatlerinin yöntem uygulaması sürecinde.
Arayüz idempotans sorunları h ttps:// www.itsvse.com/thread-6010-1-1.html Son olarak, kaynak kodu ektedir:
|
Önceki: CSV çevrimiçi dönüştürme Markdown sözdizimiSonraki: HttpClient doğrudan POST bayt bayt (gzip) sıkıştırma isteği gönderme
|