Eğitim: Minimal bir Orleans uygulaması oluşturma
Bu öğreticide, çoğu Orleans uygulamada ortak olan temel hareketli parçaları oluşturmak için adım adım yönergeleri izlersiniz. Bağımsız ve minimalist olacak şekilde tasarlanmıştır.
Bu öğreticide uygun hata işleme ve üretim ortamı için yararlı olabilecek diğer temel kodlar eksiktir. Bununla birlikte, Orleans için ortak uygulama yapısını uygulamalı olarak anlamanıza yardımcı olmalı ve sürekli öğrenmenizi size en uygun bölümlere odaklamanıza olanak sağlamalıdır.
Önkoşullar
- Visual Studio 2022
- .NET 7.0 SDK veya sonraki bir sürümü
Proje kurulumu
Bu ders için aynı çözümün parçası olarak dört proje oluşturacaksınız:
- Hububat arabirimlerini içerecek kitaplık.
- Tahıl sınıflarını içeren kütüphane.
- Silo'yu barındırmak için konsol uygulaması.
- İstemciyi barındırmak için konsol uygulaması.
Visual Studio'da yapı oluşturma
Varsayılan kodu her proje için verilen kodla değiştirin.
- Yeni bir çözümde Konsol Uygulaması projesi oluşturarak başlayın. Proje bölümünü silo olarak adlandırın ve çözümü
OrleansHelloWorld
olarak adlandırın. Konsol uygulaması oluşturma hakkında daha fazla bilgi için bkz. Öğretici: Visual Studiokullanarak .NET konsol uygulaması oluşturma. - Başka bir Konsol Uygulaması projesi ekleyin ve
Client
olarak adlandırlayın. - Sınıf Kitaplığı ekleyin ve
GrainInterfaces
olarak adlandırlayın. Sınıf kitaplığı oluşturma hakkında bilgi için bkz. Öğretici: Visual Studiokullanarak .NET sınıf kitaplığı oluşturma. - Başka bir Sınıf Kitaplığı ekleyin ve
Grains
olarak adlandırlayın.
Varsayılan kaynak dosyaları silme
- Class1.cs dosyasını Grainsiçinden silin.
- GrainInterfacesiçindeki Class1.cs sil.
Referans ekle
- Tahıllar başvuruları TahılArayüzleri.
- Silo referanslar Grains.
- İstemci, GrainInterfaces'a atıfta bulunur.
Orleans NuGet paketlerini ekle
Proje | NuGet paketi |
---|---|
Silo | Microsoft.Orleans.Server Microsoft.Extensions.Logging.Console Microsoft.Extensions.Hosting |
Müşteri | Microsoft.Orleans.Client Microsoft.Extensions.Logging.Console Microsoft.Extensions.Hosting |
Tahıl Arabirimleri | Microsoft.Orleans.Sdk |
Tahıl | Microsoft.Orleans.Sdk Microsoft.Extensions.Logging.Abstractions |
Microsoft.Orleans.Server
, Microsoft.Orleans.Client
ve Microsoft.Orleans.Sdk
, silo ve istemcide büyük olasılıkla ihtiyacınız olacak bağımlılıkları getiren meta paketlerdir. Paket başvuruları ekleme hakkında daha fazla bilgi için bkz. dotnet add package veya NuGet Package Managerkullanarak Visual Studio'da paketleri yükleme ve yönetme.
Bir tahıl arabirimi tanımla
GrainInterfaces projesinde bir IHello.cs kod dosyası ekleyin ve içinde aşağıdaki IHello
arabirimini tanımlayın:
namespace GrainInterfaces;
public interface IHello : IGrainWithIntegerKey
{
ValueTask<string> SayHello(string greeting);
}
Bir tahıl sınıfı tanımla
Grains projesinde bir HelloGrain.cs kod dosyası ekleyin ve içinde aşağıdaki sınıfı tanımlayın:
using GrainInterfaces;
using Microsoft.Extensions.Logging;
namespace Grains;
public class HelloGrain : Grain, IHello
{
private readonly ILogger _logger;
public HelloGrain(ILogger<HelloGrain> logger) => _logger = logger;
ValueTask<string> IHello.SayHello(string greeting)
{
_logger.LogInformation("""
SayHello message received: greeting = "{Greeting}"
""",
greeting);
return ValueTask.FromResult($"""
Client said: "{greeting}", so HelloGrain says: Hello!
""");
}
}
Silo'yu oluşturma
Silo projesini oluşturmak için, taneleri (grains) barındıran ve çalıştıran bir sunucuyu başlatacak kodu ekleyin. Dış depolama sistemlerine bağımlılık olmadan her şeyi yerel olarak çalıştırmanıza olanak tanıyan localhost kümeleme sağlayıcısını kullanırsınız. Daha fazla bilgi için bkz. Yerel Geliştirme Yapılandırması. Bu örnekte, içinde tek bir silo bulunan bir küme çalıştıracaksınız.
Aşağıdaki kodu Program.cs dosyasına, Silo projesine ekleyin.
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleans(silo =>
{
silo.UseLocalhostClustering()
.ConfigureLogging(logging => logging.AddConsole());
})
.UseConsoleLifetime();
using IHost host = builder.Build();
await host.RunAsync();
Önceki kod:
- IHost, Orleans kullanacak şekilde UseOrleans yöntemiyle yapılandırılır.
- localhost kümeleme sağlayıcısının UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String) yöntemiyle kullanılması gerektiğini belirtir.
-
host
çalıştırır ve Ctrl+C veyaSIGTERM
dinleyerek işlemin sona ermesini bekler.
İstemciyi oluşturma
Son olarak, bir istemciyi taneciklerle iletişim kurmak için yapılandırmanız, kümeye bağlamanız (içinde tek bir silo ile) ve tahılı çağırmanız gerekir. Kümeleme yapılandırması silo için kullandığınız yapılandırmayla eşleşmelidir. Daha fazla bilgi için bkz. Kümeler ve İstemciler.
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using GrainInterfaces;
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleansClient(client =>
{
client.UseLocalhostClustering();
})
.ConfigureLogging(logging => logging.AddConsole())
.UseConsoleLifetime();
using IHost host = builder.Build();
await host.StartAsync();
IClusterClient client = host.Services.GetRequiredService<IClusterClient>();
IHello friend = client.GetGrain<IHello>(0);
string response = await friend.SayHello("Hi friend!");
Console.WriteLine($"""
{response}
Press any key to exit...
""");
Console.ReadKey();
await host.StopAsync();
Uygulamayı çalıştırma
Çözümü derleyin ve Siloçalıştırın. Silo çalıştığını belirten onay iletisini aldıktan sonra İstemciçalıştırın.
Silo'yu komut satırından başlatmak için Silo'nun proje dosyasını içeren dizinden aşağıdaki komutu çalıştırın:
dotnet run
Silo'nun başlangıcının bir parçası olarak çok sayıda çıkış göreceksiniz. Aşağıdaki iletiyi gördükten sonra istemciyi çalıştırmaya hazırsınız:
Application started. Press Ctrl+C to shut down.
İstemci proje dizininden, istemciyi başlatmak için ayrı bir terminal penceresinde aynı .NET CLI komutunu çalıştırın:
dotnet run
.NET uygulamalarını çalıştırma hakkında daha fazla bilgi için bkz. dotnet run. Visual Studio kullanıyorsanız, birden çok başlangıç projesi yapılandırabilirsiniz.