Delen via


Zelfstudie: Een minimale Orleans toepassing maken

In deze zelfstudie volgt u stapsgewijze instructies voor het maken van fundamentele bewegende onderdelen die gebruikelijk zijn voor de meeste Orleans toepassingen. Het is ontworpen om zelfstandig en minimalistisch te zijn.

In deze zelfstudie ontbreekt de juiste foutafhandeling en andere essentiële code die nuttig zou zijn voor een productieomgeving. Het moet u echter helpen om praktische kennis te krijgen van de algemene app-structuur voor Orleans en u in staat te stellen om u te concentreren op de onderdelen die het meest relevant voor u zijn.

Vereisten

Projectinstellingen

Voor deze zelfstudie gaat u vier projecten maken als onderdeel van dezelfde oplossing:

  • Bibliotheek die de graaninterfaces bevat.
  • Bibliotheek die de graanklassen bevat.
  • Console-app voor het hosten van de Silo.
  • Console-app voor het hosten van de client.

De structuur maken in Visual Studio

Vervang de standaardcode door de code die voor elk project is opgegeven.

  1. Begin met het maken van een console-app-project in een nieuwe oplossing. Roep de projectonderdeelsilo aan en noem de oplossing OrleansHelloWorld. Zie Zelfstudie: Een .NET-consoletoepassing maken met Visual Studio voor meer informatie over het maken van een console-app.
  2. Voeg nog een console-app-project toe en geef het een Clientnaam.
  3. Voeg een klassebibliotheek toe en geef deze GrainInterfaceseen naam. Zie Zelfstudie: Een .NET-klassebibliotheek maken met Visual Studio voor meer informatie over het maken van een klassebibliotheek.
  4. Voeg nog een klassebibliotheek toe en geef deze een Grainsnaam.

Standaardbronbestanden verwijderen

  1. Verwijder Class1.cs uit Grains.
  2. Verwijder Class1.cs uit GrainInterfaces.

Verwijzingen toevoegen

  1. GrainInterfaces verwijst naar GrainInterfaces.
  2. Silo verwijst naar Graan.
  3. Client verwijst naar GrainInterfaces.

NuGet-pakketten toevoegen Orleans

Project NuGet-pakket
Silo Microsoft.Orleans.Server
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Klant Microsoft.Orleans.Client
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Grain Interfaces Microsoft.Orleans.Sdk
Korrels Microsoft.Orleans.Sdk
Microsoft.Extensions.Logging.Abstractions

Microsoft.Orleans.Serveren Microsoft.Orleans.Client Microsoft.Orleans.Sdk zijn metapackages die afhankelijkheden bevatten die u waarschijnlijk nodig hebt voor de Silo en client. Zie dotnet add package or Install and manage packages in Visual Studio using the NuGet Pakketbeheer voor meer informatie over het toevoegen van pakketverwijzingen.

Een korrelinterface definiëren

Voeg in het Project GrainInterfaces een IHello.cs codebestand toe en definieer de volgende IHello interface:

namespace GrainInterfaces;

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

Een graanklasse definiëren

Voeg in het Grains-project een HelloGrain.cs codebestand toe en definieer de volgende klasse erin:

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

De silo maken

Als u het Silo-project wilt maken, voegt u code toe om een server te initialiseren die als host fungeert voor de korrels, een silo. U gebruikt de localhost-clusteringprovider, waarmee u alles lokaal kunt uitvoeren, zonder dat u afhankelijk bent van externe opslagsystemen. Zie De configuratie van lokale ontwikkeling voor meer informatie. In dit voorbeeld voert u een cluster uit met één silo erin.

Voeg de volgende code toe aan Program.cs van het Silo-project:

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

Met de voorgaande code wordt:

De client maken

Ten slotte moet u een client configureren voor communicatie met de korrels, het verbinden met het cluster (met één silo erin) en het graan aanroepen. De clusterconfiguratie moet overeenkomen met de configuratie die u voor de silo hebt gebruikt. Zie Clusters en clients voor meer informatie

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

De toepassing uitvoeren

Bouw de oplossing en voer de Silo uit. Nadat u het bevestigingsbericht hebt ontvangen dat de Silo wordt uitgevoerd, voert u de client uit.

Als u de Silo vanaf de opdrachtregel wilt starten, voert u de volgende opdracht uit vanuit de map met het projectbestand van de Silo:

dotnet run

U ziet talloze uitvoer als onderdeel van het opstarten van de Silo. Nadat u het volgende bericht hebt weergegeven, kunt u de client uitvoeren:

Application started. Press Ctrl+C to shut down.

Voer vanuit de clientprojectmap dezelfde .NET CLI-opdracht uit in een afzonderlijk terminalvenster om de client te starten:

dotnet run

Zie dotnet run voor meer informatie over het uitvoeren van .NET-apps. Als u Visual Studio gebruikt, kunt u meerdere opstartprojecten configureren.

Zie ook