Tutorial: Membuat aplikasi Orleans minimal
Dalam tutorial ini, Anda mengikuti instruksi langkah demi langkah untuk membuat komponen bergerak dasar yang umum digunakan dalam sebagian besar aplikasi Orleans. Ini dirancang untuk bersifat mandiri dan minimalis.
Tutorial ini tidak memiliki penanganan kesalahan yang sesuai dan kode penting lainnya yang akan berguna untuk lingkungan produksi. Namun, ini akan membantu Anda mendapatkan pemahaman langsung tentang struktur aplikasi umum untuk Orleans dan memungkinkan Anda untuk memfokuskan pembelajaran berkelanjutan Anda pada bagian-bagian yang paling relevan bagi Anda.
Prasyarat
- Visual Studio 2022
- .NET 7.0 SDK atau yang lebih baru
Penyiapan proyek
Untuk tutorial ini, Anda akan membuat 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 diberikan untuk setiap proyek.
- Mulailah dengan membuat proyek Aplikasi Konsol dalam solusi baru. Sebut bagian proyek 'silo' dan beri nama solusinya
OrleansHelloWorld
. Untuk informasi selengkapnya tentang membuat aplikasi konsol, lihat Tutorial : Membuat aplikasi konsol .NET menggunakan Visual Studio. - Tambahkan proyek Aplikasi Konsol lain dan beri nama
Client
. - Tambahkan Pustaka Kelas dan beri nama
GrainInterfaces
. Untuk informasi tentang membuat pustaka kelas, lihat Tutorial : Membuat pustaka kelas .NET menggunakan Visual Studio. - Tambahkan Pustaka Kelas lain dan beri nama
Grains
.
Menghapus file sumber default
- Hapus Class1.cs dari Grains.
- Hapus Class1.cs dari GrainInterfaces.
Menambahkan referensi
- Biji-bijian referensi AntarmukaBiji.
- Silo referensi Butir.
- 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 metapaket yang membawa dependensi yang kemungkinan Anda butuhkan pada Silo dan klien. Untuk informasi selengkapnya tentang menambahkan referensi paket, lihat dotnet menambahkan paket atau Menginstal dan mengelola paket di Visual Studio menggunakan Manajer Paket NuGet.
Menentukan antarmuka grain
Dalam proyek GrainInterfaces, tambahkan file kode IHello.cs dan tentukan antarmuka IHello
berikut di dalamnya:
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 di dalamnya:
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. Anda menggunakan penyedia pengklusteran localhost, yang memungkinkan Anda menjalankan semuanya secara lokal, tanpa dependensi pada sistem penyimpanan eksternal. Untuk informasi selengkapnya, lihat Konfigurasi Pengembangan Lokal. Dalam contoh ini, Anda menjalankan kluster dengan satu silo di dalamnya.
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:
- Mengonfigurasi IHost untuk menggunakan Orleans dengan metode UseOrleans.
- Menentukan bahwa penyedia pengklusteran localhost harus digunakan dengan metode UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String).
- Menjalankan
host
dan menunggu proses berakhir, dengan mendengarkan Ctrl+C atauSIGTERM
.
Membuat klien
Terakhir, Anda perlu mengonfigurasi klien untuk berkomunikasi dengan biji-bijian, menghubungkannya ke kluster (dengan satu silo di dalamnya), dan memanggil biji-bijian. Konfigurasi pengklusteran harus cocok dengan yang Anda gunakan 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 Anda mendapatkan pesan konfirmasi bahwa Silo sedang berjalan, jalankan Client.
Untuk memulai Silo dari baris perintah, jalankan perintah berikut dari direktori yang berisi file proyek Silo:
dotnet run
Anda akan melihat banyak output sebagai bagian dari 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 .NET CLI yang sama di jendela terminal terpisah untuk memulai klien:
dotnet run
Untuk informasi selengkapnya tentang menjalankan aplikasi .NET, lihat dotnet run. Jika Menggunakan Visual Studio, Anda dapat mengonfigurasi beberapa proyek startup.