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 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

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.

  1. 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ü 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.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:

İ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.

Ayrıca bkz.