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.
- 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. - Voeg nog een console-app-project toe en geef het
Client
een naam. - 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. - Voeg een andere klassebibliotheek toe en noem deze
Grains
.
Standaardbronbestanden verwijderen
- Verwijder Class1.cs uit Grains.
- Verwijder Class1.cs uit GrainInterfaces.
Verwijzingen toevoegen
- Grains verwijzingen GrainInterfaces.
- Silo verwijst naar Grains.
- 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:
- Configureert de IHost om Orleans te gebruiken 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.
- Voert de
host
uit en wacht tot het proces is beëindigd door te luisteren naar Ctrl+C ofSIGTERM
.
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.