Sdílet prostřednictvím


Kurz: Hello World

Tento přehled se spojuje s ukázkovou aplikací Hello World.

Hlavní koncepty Orleans zahrnují sila, klienta a jednu nebo více zrn. Vytvoření Orleans aplikace zahrnuje konfiguraci sila, konfiguraci klienta a zápis zrn.

Konfigurace sila

Konfigurujte silos prostřednictvím programového kódu ISiloBuilder a několika doplňkových tříd voleb. Seznam všech možností najdete v seznamu tříd možností.

static async Task<ISiloHost> StartSilo(string[] args)
{
    var builder = Host.CreateApplicationBuilder(args)
        UseOrleans(c =>
        {
            c.UseLocalhostClustering()
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "dev";
                    options.ServiceId = "HelloWorldApp";
                })
                .Configure<EndpointOptions>(
                    options => options.AdvertisedIPAddress = IPAddress.Loopback)
                .ConfigureApplicationParts(
                    parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
                .ConfigureLogging(logging => logging.AddConsole());
        });

    var host = builder.Build();
    await host.StartAsync();

    return host;
}
Možnost Použití
.UseLocalhostClustering() Nakonfiguruje klienta pro připojení k silu na místním hostiteli.
ClusterOptions ClusterId je název pro cluster Orleans, který musí být stejný pro silo i klienta, aby mohli komunikovat. ServiceId je ID používané pro aplikaci a nesmí se měnit napříč nasazeními.
EndpointOptions Řekne silu, kde má naslouchat. V tomto příkladu použijte loopback.
ConfigureApplicationParts Přidá do aplikace Orleans sestavení třídy grain a rozhraní jako součásti aplikace.

Po načtení konfigurací sestavte ISiloHost a poté ho spusťte asynchronně.

Konfigurace klienta

Podobně jako silo nakonfigurujte klienta pomocí IClientBuilder a podobné sbírky tříd možností.

static async Task<IClusterClient> StartClientWithRetries()
{
    attempt = 0;
    var client = new ClientBuilder()
        .UseLocalhostClustering()
        .Configure<ClusterOptions>(options =>
        {
            options.ClusterId = "dev";
            options.ServiceId = "HelloWorldApp";
        })
        .ConfigureLogging(logging => logging.AddConsole())
        .Build();

    await client.Connect(RetryFilter);
    Console.WriteLine("Client successfully connect to silo host");
    return client;
}
Možnost Použití
.UseLocalhostClustering() Stejné jako pro SiloHost
ClusterOptions Stejné jako pro SiloHost

Podrobnější průvodce konfigurací klienta najdete v části Konfigurace klienta v průvodci konfigurací.

Zapsat zrno

Zrna jsou klíčovými primitivy programovacího Orleans modelu. Jedná se o stavební bloky Orleans aplikace, které slouží jako atomické jednotky izolace, distribuce a trvalosti. Zrna jsou objekty představující entity aplikace. Stejně jako v klasickém Object-Oriented programování zapouzdřuje grain stav entity a kóduje její chování v logice kódu. Zrna mohou obsahovat odkazy na sebe navzájem a interagovat vyvoláním metod vystavených prostřednictvím rozhraní.

Přečtěte si další informace v dokumentaci v části Orleans.

Toto je hlavní tělo kódu pro obilninu Hello World:

namespace HelloWorld.Grains;

public class HelloGrain : Orleans.Grain, IHello
{
    Task<string> IHello.SayHello(string greeting)
    {
        logger.LogInformation($"SayHello message received: greeting = '{greeting}'");
        return Task.FromResult($"You said: '{greeting}', I say: Hello!");
    }
}

Třída grain implementuje jedno nebo více rozhraní grain. Další informace najdete v části Obilnárna .

namespace HelloWorld.Interfaces;

public interface IHello : Orleans.IGrainWithIntegerKey
{
    Task<string> SayHello(string greeting);
}

Jak díly spolupracují

Tento programovací model vychází ze základní koncepce distribuovaného Object-Oriented programování. Začněte nejprve ISiloHost. Pak program OrleansClient spusťte. Metoda Main volá metodu OrleansClient, která spouští klienta, StartClientWithRetries(). Předejte klientovi metodu DoClientWork() .

static async Task DoClientWork(IClusterClient client)
{
    var friend = client.GetGrain<IHello>(0);
    var response = await friend.SayHello("Good morning, my friend!");
    Console.WriteLine($"\n\n{response}\n\n");
}

V tomto okamžiku OrleansClient vytvoří odkaz na zrno IHello a zavolá jeho SayHello() metodu IHello prostřednictvím rozhraní. Toto volání aktivuje zrnko v silu. OrleansClient odešle pozdrav do aktivovaného zrnka. Zrno vrátí pozdrav jako odpověď OrleansClient, který ho pak zobrazí na konzoli.

Spuštění ukázkové aplikace

Ukázkovou aplikaci spustíte v souboru Readme.