Aracılığıyla paylaş


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 izleyin. Kendi kendine yetebilen ve minimalist olacak şekilde tasarlanmıştır.

Bu öğreticide uygun hata işleme ve üretim ortamı için yararlı olan diğer temel kodlar eksiktir. Ancak, ortak Orleans uygulama yapısı hakkında uygulamalı bir anlayış kazanmanıza yardımcı olmalı ve devam eden öğrenmenizi size en uygun bölümlere odaklamanıza olanak sağlamalıdır.

Önkoşullar

Proje kurulumu

Bu öğretici için aynı çözümün parçası olarak dört proje oluşturun:

  • 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 sağlanan kodla değiştirin.

  1. Yeni bir çözümde Konsol Uygulaması projesi oluşturarak başlayın. Projeyi Silo çağırın ve çözümü OrleansHelloWorldolarak adlandırın. Konsol uygulaması oluşturma hakkında daha fazla bilgi için bkz. Öğretici: Visual Studiokullanarak .NET konsol uygulaması oluşturma.
  2. Başka bir Konsol Uygulaması projesi ekleyin ve Clientolarak adlandırlayın.
  3. Sınıf Kitaplığı ekleyin ve GrainInterfacesolarak 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.
  4. Başka bir Sınıf Kitaplığı ekleyin ve Grainsolarak adlandırlayın.

Varsayılan kaynak dosyaları silme

  1. Class1.cs dosyasını Grainsiçinden silin.
  2. GrainInterfacesiçindeki Class1.cs sil.

Referans ekle

  1. Tahıllar başvuruları TahılArayüzleri.
  2. Silo referanslar Grains.
  3. İ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.Clientve Microsoft.Orleans.Sdk büyük olasılıkla Silo ve istemcide ihtiyaç duyacağınız bağımlılıkları getiren meta paketlerdir. Paket başvuruları ekleme hakkında daha fazla bilgi için dotnet package add veya Visual Studio'da NuGet Paket Yöneticisini kullanarak paketleri yükleme ve yönetme başlıklarına bakın.

Bir tahıl arabirimi tanımla

GrainInterfaces projesinde bir IHello.cs kod dosyası ekleyin ve aşağıdaki IHello arabirimi 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 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!
            """);
    }
}

Siloyu 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ğlı olmadan her şeyin yerel olarak çalıştırılmasına olanak tanıyan localhost kümeleme sağlayıcısını kullanın. Daha fazla bilgi için bkz. Yerel Geliştirme Yapılandırması. Bu örnekte, tek bir silo ile bir küme çalıştırın.

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:

İstemciyi oluşturma

Son olarak, bir istemciyi taneciklerle iletişim kuracak, kümeye (tek bir silo ile) bağlayacak ve tahılı çağıracak şekilde yapılandırın. Kümeleme yapılandırması silo için kullanılan 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'nın çalıştığını belirten onay iletisini aldıktan sonra İstemci'yi ç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 başlatma işleminin 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 demektir:

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.

Ayrıca bkz.