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 kunt zich concentreren op de onderdelen die het meest relevant voor u zijn.

Voorwaarden

Projectopzet

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 silo van het projectonderdeel aan en noem de oplossing OrleansHelloWorld. Zie Zelfstudie: Een .NET-consoletoepassing maken met Visual Studiovoor meer informatie over het maken van een console-app.
  2. Voeg nog een console-app-project toe en geef het Clienteen naam.
  3. Voeg een klassebibliotheek toe en noem deze GrainInterfaces. Zie Zelfstudie: Een .NET-klassebibliotheek maken met Visual Studiovoor meer informatie over het maken van een klassebibliotheek.
  4. Voeg een andere klassebibliotheek toe en noem deze Grains.

Standaardbronbestanden verwijderen

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

Verwijzingen toevoegen

  1. Grains verwijzingen GrainInterfaces.
  2. Silo verwijst naar Grains.
  3. verwijzingen 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
Granen Microsoft.Orleans.Sdk
Microsoft.Extensions.Logging.Abstractions

Microsoft.Orleans.Server, Microsoft.Orleans.Client en Microsoft.Orleans.Sdk zijn metapackages die afhankelijkheden bevatten die u waarschijnlijk nodig hebt op de Silo en client. Zie dotnet-pakket toevoegen of Pakketten installeren en beheren in Visual Studio met behulp van de NuGet Package Manager-voor meer informatie over het toevoegen van pakketverwijzingen.

Een korrelinterface definiëren

Voeg in het GrainInterfaces project 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 voor meer informatie Lokale Ontwikkelingsconfiguratie. In dit voorbeeld draait u een cluster met één silo erin.

Voeg de volgende code toe aan Program.cs van het project 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();

De voorgaande code:

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 clientsvoor 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 Silouit. Nadat u het bevestigingsbericht hebt ontvangen dat de Silo draait, voert u de Clientuit.

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

Je ziet talloze uitvoeringen als onderdeel van het opstarten van de Silo. Nadat u het volgende bericht hebt gezien, kunt u de client starten:

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 runvoor meer informatie over het uitvoeren van .NET-apps. Als u Visual Studio gebruikt, kunt u meerdere opstartprojecten configureren.

Zie ook