Tutorial: Membuat aplikasi Orleans minimal

Dalam tutorial ini, ikuti instruksi langkah demi langkah untuk membuat komponen bergerak dasar yang lazim ditemukan pada Orleans aplikasi. Ini dirancang untuk bersifat mandiri dan minimalis.

Tutorial ini tidak memiliki penanganan kesalahan yang sesuai dan kode penting lainnya yang berguna untuk lingkungan produksi. Namun, ini akan membantu Anda mendapatkan pemahaman langsung tentang struktur aplikasi umum Orleans dan memungkinkan Anda untuk memfokuskan pembelajaran berkelanjutan Anda pada bagian-bagian yang paling relevan bagi Anda.

Petunjuk / Saran

Untuk aplikasi Orleans siap produksi, pertimbangkan untuk menggunakan aplikasi .NET Aspire untuk menyederhanakan manajemen sumber daya, penemuan layanan, pengamatan, dan penyebaran. Aspire menangani konfigurasi untuk clustering, penyimpanan grain, pengingat, dan streaming secara otomatis. Lihat integrasi .NET AspireOrleans untuk mempelajari lebih lanjut.

Prasyarat

Penyiapan proyek

Untuk tutorial ini, buat empat proyek sebagai bagian dari solusi yang sama:

  • Pustaka untuk menyertakan antarmuka grain.
  • Pustaka untuk menampung kelas-kelas biji-bijian.
  • Aplikasi konsol untuk menghosting Silo.
  • Aplikasi konsol untuk menghosting Klien.

Membuat struktur di Visual Studio

Ganti kode default dengan kode yang disediakan untuk setiap proyek.

  1. Mulailah dengan membuat proyek Aplikasi Konsol dalam solusi baru. Panggil proyek Silo dan beri nama solusi OrleansHelloWorld. Untuk informasi selengkapnya tentang membuat aplikasi konsol, lihat Tutorial: Membuat aplikasi konsol .NET.
  2. Tambahkan proyek Aplikasi Konsol lain dan beri nama Client.
  3. Tambahkan Pustaka Kelas dan beri nama GrainInterfaces. Untuk informasi tentang membuat pustaka kelas, lihat Tutorial: Membuat pustaka kelas .NET.
  4. Tambahkan Pustaka Kelas lain dan beri nama Grains.

Menghapus file sumber default

  1. Hapus Class1.cs dari Grains.
  2. Hapus Class1.cs dari GrainInterfaces.

Menambahkan referensi

  1. Biji-bijian referensi AntarmukaBiji.
  2. Silo referensi Butir.
  3. Client mereferensikan GrainInterfaces.

Menambahkan paket NuGet Orleans

Proyek Paket NuGet
Silo Microsoft.Orleans.Server
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Klien Microsoft.Orleans.Client
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Antarmuka Butiran Microsoft.Orleans.Sdk
Biji-bijian Microsoft.Orleans.Sdk
Microsoft.Extensions.Logging.Abstractions

Microsoft.Orleans.Server, Microsoft.Orleans.Client, dan Microsoft.Orleans.Sdk adalah metapackage yang memuat dependensi yang kemungkinan besar Anda perlukan pada Silo dan klien. Untuk informasi selengkapnya tentang menambahkan referensi paket, lihat menambahkan paket dotnet atau Install dan mengelola paket di Visual Studio menggunakan NuGet Package Manager.

Menentukan antarmuka grain

Dalam proyek GrainInterfaces , tambahkan file kode IHello.cs dan tentukan antarmuka berikut IHello :

namespace GrainInterfaces;

public interface IHello : IGrainWithIntegerKey
{
    ValueTask<string> SayHello(string greeting);
}

Menentukan kelas biji-bijian

Dalam proyek Grains , tambahkan file kode HelloGrain.cs dan tentukan kelas berikut:

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!
            """);
    }
}

Membuat silo

Untuk membuat proyek Silo, tambahkan kode untuk menginisialisasi server yang menghosting dan menjalankan biji-bijian—silo. Gunakan penyedia pengklusteran localhost, yang memungkinkan menjalankan semuanya secara lokal tanpa bergantung pada sistem penyimpanan eksternal. Untuk informasi selengkapnya, lihat Konfigurasi Pengembangan Lokal. Dalam contoh ini, jalankan kluster dengan satu silo.

Tambahkan kode berikut ke Program.cs dari proyek Silo.

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();

Kode sebelumnya:

Membuat klien

Terakhir, konfigurasikan klien untuk berkomunikasi dengan biji-bijian, sambungkan ke kluster (dengan satu silo), dan panggil biji-bijian. Konfigurasi pengklusteran harus cocok dengan yang digunakan untuk silo. Untuk informasi selengkapnya, lihat Kluster dan Klien.

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();

Jalankan aplikasi

Bangun solusi dan jalankan Silo. Setelah menerima pesan konfirmasi bahwa Silo sedang berjalan, jalankan Klien.

Untuk memulai Silo dari baris perintah, jalankan perintah berikut dari direktori yang berisi file proyek Silo:

dotnet run

Anda akan melihat banyak hasil sebagai bagian dari proses startup Silo. Setelah melihat pesan berikut, Anda siap untuk menjalankan klien:

Application started. Press Ctrl+C to shut down.

Dari direktori proyek klien, jalankan perintah CLI .NET yang sama di jendela terminal terpisah untuk memulai klien:

dotnet run

Untuk informasi selengkapnya tentang menjalankan aplikasi .NET, lihat dotnet berjalan. Jika Anda menggunakan Visual Studio, Anda dapat mengonfigurasi beberapa proyek startup.

Lihat juga