Aracılığıyla paylaş


Orleans akış sağlayıcıları

Akışlar farklı şekillerde ve formlarda gelebilir. Bazı akışlar etkinlikleri doğrudan TCP bağlantıları üzerinden iletirken, bazıları ise etkinlikleri dayanıklı kuyruklar aracılığıyla iletebilir. Farklı akış türleri farklı toplu iş stratejileri, önbelleğe alma algoritmaları veya geri basınç yöntemleri kullanabilir. Akış sağlayıcıları, Akış Çalışma Zamanı'nda Orleans herhangi bir akış türü uygulamanıza olanak sağlayan genişletilebilirlik noktalarıdır ve akış uygulamalarında bu davranışsal seçimlerin yalnızca bir alt kümesine yönelik kısıtlamalardan kaçınır. Bu genişletilebilirlik noktası, ruhen depolama sağlayıcılarına benzer.

Azure Event Hub akış sağlayıcısı

Azure Event Hubs , saniyede milyonlarca olay alıp işleyebilen, tam olarak yönetilen, gerçek zamanlı bir veri alımı hizmetidir. Birden çok kaynaktan yüksek aktarım hızına sahip, düşük gecikme süreli veri alımını ve bu verilerin birden çok tüketici tarafından daha sonra işlenmesini işleyecek şekilde tasarlanmıştır.

Event Hubs genellikle bir olay işlem hattı için "ön kapı" olarak hizmet veren daha büyük bir olay işleme mimarisinin temeli olarak kullanılır. Bunu sosyal medya akışları, IoT cihazları ve günlük dosyaları gibi çeşitli kaynaklardan veri almak için kullanabilirsiniz. Event Hubs'ın temel avantajlarından biri, en büyük olay işleme iş yüklerinin bile gereksinimlerini karşılamak için yatay olarak ölçeği genişletme olanağıdır. Ayrıca, birden çok Azure bölgesine dağıtılmış birden fazla veri çoğaltması ile yüksek oranda kullanılabilir ve hataya dayanıklıdır, bu da yüksek kullanılabilirliği garanti eder.

Microsoft..Orleans. Streaming.EventHubs NuGet paketi Event Hubs akış sağlayıcısını içerir.

Azure Kuyruk (AQ) akış sağlayıcısı

Azure Kuyruğu (AQ) akış sağlayıcısı Olayları Azure Kuyrukları üzerinden teslim eder. Üretici tarafında, AQ akış sağlayıcısı olayları doğrudan Azure Kuyruğu'na sıralar. Tüketici tarafında, AQ akış sağlayıcısı, olayları Azure Kuyrukları'ndan çeken ve bunları kullanan uygulama koduna teslim eden bir dizi çekme aracısını yönetir. Çekme aracılarını dağıtılmış bir "mikro hizmet" (bölümlenmiş, yüksek oranda kullanılabilir ve elastik dağıtılmış bileşen) olarak düşünebilirsiniz. Çekme aracıları, uygulama taneciklerini barındıran aynı siloların içinde çalışır. Bu nedenle, kuyruklardan çekmek için ayrı Azure çalışan rolleri çalıştırmanız gerekmez. Orleans Streaming Runtime aracıları çekme, yönetim, geri baskı, aralarındaki kuyrukları dengeleme ve başarısız bir aracıdaki kuyrukları başka bir aracıya teslim etme işlemlerini tamamen yönetir. Bu, akışlar kullanılarak uygulama kodu için saydamdır.

Microsoft.Orleans.Streaming.AzureStorage NuGet paketi Azure Kuyruk depolama akış sağlayıcısını içerir.

Kuyruk bağdaştırıcıları

Dayanıklı kuyruklar üzerinden olay teslim eden farklı akış sağlayıcıları benzer davranışlar sergiler ve benzer uygulamalara tabidir. Bu nedenle, sıfırdan tamamen yeni bir akış sağlayıcısı yazmadan farklı kuyruk türlerini takmanıza olanak tanıyan genel bir genişletilebilir PersistentStreamProvider sağlarız. PersistentStreamProvider belirli kuyruk uygulama ayrıntılarını soyutlayan ve olayları kuyruğa eklemek ve kuyruktan çıkarmak için araçlar sağlayan bir IQueueAdapter bileşen kullanır. İçindeki PersistentStreamProvider mantık diğer her şeyi işler. Yukarıda belirtilen Azure Kuyruk Sağlayıcısı da şu şekilde uygulanır: PersistentStreamProvider kullanan bir AzureQueueAdapter örneğidir.

Akış için .NET Aspire entegrasyonu

.NET Aspire , kaynak sağlamayı ve bağlantıyı otomatik olarak yöneterek akış yapılandırmasını basitleştirir Orleans .

Aspire ile Azure Kuyruk Depolama akışı

AppHost projesi (Program.cs):

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage");
var queues = storage.AddQueues("streaming");

var orleans = builder.AddOrleans("cluster")
    .WithClustering(builder.AddRedis("redis"))
    .WithStreaming("AzureQueueProvider", queues);

builder.AddProject<Projects.MySilo>("silo")
    .WithReference(orleans)
    .WithReference(queues);

builder.Build().Run();

Silo projesi (Program.cs):

var builder = Host.CreateApplicationBuilder(args);

builder.AddServiceDefaults();
builder.AddKeyedAzureQueueServiceClient("streaming");
builder.UseOrleans();

builder.Build().Run();

Tip

Yerel geliştirme sırasında Aspire, Azure Kuyruk Depolama için Azurite öykünücüsünü otomatik olarak kullanır. Üretim dağıtımlarında Aspire, Azure dağıtım yapılandırmanıza göre gerçek Azure Depolama hesabınıza bağlanır.

Önemli

Kuyruk istemcisini bağımlılık enjeksiyonu kapsayıcısına kaydetmek için AddKeyedAzureQueueServiceClient kodunu aramanız gerekir. Orleans Akış sağlayıcıları kaynakları anahtarlı hizmet adlarına göre arar; bu adımı atlarsanız kuyruk Orleans istemcisini çözümleyemez ve çalışma zamanında bağımlılık çözümleme hatası oluşturur.

Geliştirme için bellek içi veri akışı

Yerel geliştirme ve test senaryoları için, herhangi bir dış bağımlılık gerektirmeyen bellek içi akış kullanabilirsiniz:

AppHost projesi (Program.cs):

var builder = DistributedApplication.CreateBuilder(args);

var orleans = builder.AddOrleans("cluster")
    .WithDevelopmentClustering()
    .WithMemoryStreaming("MemoryStreamProvider");

builder.AddProject<Projects.MySilo>("silo")
    .WithReference(orleans);

builder.Build().Run();

Silo projesi (Program.cs):

var builder = Host.CreateApplicationBuilder(args);

builder.AddServiceDefaults();
builder.UseOrleans();

builder.Build().Run();

Uyarı

Bellek içi akışlar dayanıklı değildir ve silo yeniden başlatıldığında kaybolur. İleti dayanıklılığı gerektiren üretim iş yükleri için değil, yalnızca geliştirme ve test için bellek içi akış kullanın.

Aspire ile kanalları yayınlama

Yayın kanalları, iletileri tüm abonelere yayınlamak için basit bir pub/sub mekanizması sağlar:

AppHost projesi (Program.cs):

var builder = DistributedApplication.CreateBuilder(args);

var orleans = builder.AddOrleans("cluster")
    .WithDevelopmentClustering()
    .WithBroadcastChannel("BroadcastChannel");

builder.AddProject<Projects.MySilo>("silo")
    .WithReference(orleans);

builder.Build().Run();

Silo projesi (Program.cs):

var builder = Host.CreateApplicationBuilder(args);

builder.AddServiceDefaults();
builder.UseOrleans();

builder.Build().Run();

.NET Aspire entegrasyonu hakkında Orleans kapsamlı belgeler için, bkz Orleans ve .NET Aspire entegrasyonu.

Basit ileti akışı sağlayıcısı

SMS sağlayıcısı olarak da bilinen basit mesaj akışı sağlayıcısı, Orleans grain mesajlaşmayı kullanarak TCP üzerinden düzenli bir şekilde olayları teslim eder. SMS olayları güvenilir olmayan TCP bağlantıları üzerinden teslim edildiklerinden, SMS güvenilir olay teslimi garantisi vermez ve SMS akışları için başarısız iletileri otomatik olarak yeniden göndermez. Varsayılan olarak, üreticinin OnNextAsync çağrısı, akış tüketicisinin işleme durumunu temsil eden bir Task döndürür. Bu, üreticiye tüketicinin olayı başarıyla alıp almadığını ve işleyip işlemediğini bildirir. Bu görev başarısız olursa, üretici aynı olayı yeniden göndermeye karar verebilir ve uygulama düzeyinde güvenilirlik elde edebilir. İleti akışı teslimi en iyi çaba olsa da, SMS akışları güvenilirdir. Başka bir ifadeyle, Pub-Sub tarafından gerçekleştirilen aboneden üreticiye bağlama tamamen güvenilirdir.

Ayrıca bakınız