架构师_程序员_码农网

K Parolayı al
Kayıt Olun

QQ登录

Başlamak için sadece bir adım

Arama
Görüntüleme:32618|Yanıt: 3
打印 上一主题 下一主题

[ASP.NET]ASP.NET Core (V) CAP Tabanlı Dağıtılmış İşlemler

[Bağlantıyı kopyala]
ASP.NETCore
D 跳转到指定楼层
sahibi
发表于 2021-3-17 18:12:50|只看该作者回帖奖励|TersGözat|Okuma Modu
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:

Misafir, bu yazının gizli içeriğini görmek istiyorsanız lütfen şu adrese yanıt verin






Önceki: CSV çevrimiçi dönüştürme Markdown sözdizimi
Sonraki: HttpClient doğrudan POST bayt bayt (gzip) sıkıştırma isteği gönderme
Çiftçi ağı kodu, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
hafif hafif hafif
2021-3-18 18:11:20 tarihindegönderildi|Sadece Yazarı Görüntüle
Bunu yapıp yapamayacağınızdan emin değilim ama yapabileceğinizden eminim.
Kod çiftçi ağı, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
Bunu yapabileceğimden emin değilim....
bank koltuğu
发表于 2021-9-22 20:42:18|只看该作者
Bunun hayranı olup olmadığınızdan emin değilim, ama bunun hayranı olduğunuza eminim.
Çiftçi ağı kodu, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
wangang wangang
发表于 2021-12-31 15:08:21|只看该作者
İçinde Öğrenmek
Çok iyi, çok iyi
Kod çiftçi ağı, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
Geri gönderi yapabilmeniz için giriş yapmanız gerekmektedir Giriş Yap | Kayıt Ol

İntegral kurallarının bu versiyonu


YASAL UYARI: Code Farmer tarafından yayınlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amacıyla kullanılmak üzere sınırlandırılmıştır; yukarıdaki içerikler ticari veya yasadışı amaçlarla kullanılamaz, aksi takdirde tüm sonuçlar kullanıcıların kendileri tarafından karşılanacaktır. Bu site bilgileri ağdan alınmıştır, telif hakkı anlaşmazlığının bu site ile hiçbir ilgisi yoktur. Yukarıdaki içeriği indirdikten sonraki 24 saat içinde bilgisayarınızdan tamamen kaldırmalısınız. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kaydı satın alın ve daha iyi orijinal hizmet alın. Herhangi bir ihlal varsa, bununla ilgilenmek için lütfen bizimle e-posta yoluyla iletişime geçin.

Posta To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-18 14:52

Hızlı YanıtBaşadön Listeye dön