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.
- 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. - Voeg nog een console-app-project toe en geef het een
Client
naam. - Voeg een klassebibliotheek toe en geef deze
GrainInterfaces
een naam. Zie Zelfstudie: Een .NET-klassebibliotheek maken met Visual Studio voor meer informatie over het maken van een klassebibliotheek. - Voeg nog een klassebibliotheek toe en geef deze een
Grains
naam.
Standaardbronbestanden verwijderen
- Verwijder Class1.cs uit Grains.
- Verwijder Class1.cs uit GrainInterfaces.
Verwijzingen toevoegen
- GrainInterfaces verwijst naar GrainInterfaces.
- Silo verwijst naar Graan.
- 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.Server
en 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:
- Hiermee configureert u het IHost te gebruiken Orleans met de UseOrleans methode.
- Hiermee geeft u op dat de localhost-clusteringprovider moet worden gebruikt met de UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String) methode.
- Hiermee wordt het
host
proces uitgevoerd en wordt gewacht tot het proces is beëindigd door te luisteren naar Ctrl+C of .SIGTERM
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.