integrace .NET AspireOrleans
Orleans má integrovanou podporu pro .NET.NET Aspire. .NET .NET Aspireaplikační model umožňuje popsat služby, databáze a další prostředky a infrastrukturu ve vaší aplikaci a jejich vzájemné vztahy. Orleans poskytuje jednoduchý způsob vytváření distribuovaných aplikací, které jsou elasticky škálovatelné a odolné proti chybám. .NET Aspire můžete použít ke konfiguraci a orchestraci Orleans a jejích závislostí, jako je poskytování Orleans členství v clusteru a úložiště.
Orleans je reprezentován jako prostředek v .NET Aspire. Na rozdíl od ostatních integrací integrace Orleans nevytvoří kontejner a nevyžaduje samostatný integrační balíček client. Místo toho dokončíte konfiguraci Orleans v hostitelském projektu aplikace .NET Aspire.
Poznámka
Tato integrace vyžaduje Orleans verze 8.1.0 nebo novější.
Integrace hostování
Orleans integrace modelů hostování představuje službu Orleans jako typ OrleansService. Pokud chcete získat přístup k tomuto typu a rozhraním API, přidejte balíček 📦Aspire.Hosting.Orleans NuGet do projektu hostitele aplikace .
dotnet add package Aspire.Hosting.Orleans
Další informace najdete v části dotnet add package nebo v části Správa závislostí balíčků v aplikacích .NET.
Přidejte prostředek Orleans
V projektu hostitele aplikace zavolejte AddOrleans, abyste přidali a vrátili sestavovač prostředků služby Orleans. Název poskytnutý prostředku Orleans slouží k diagnostickým účelům. Pro většinu aplikací stačí hodnota "default"
.
var orleans = builder.AddOrleans("default")
Použití úložiště Azure pro klastrové tabulky a úložiště granulí.
V aplikaci Orleans je základním stavebním prvkem zrno. Zrno může mít trvalé stavy. Musíte uložit trvalý stav pro zrno někam. V .NET.NET Aspire aplikaci je Azure Blob Storage jedním z možných umístění.
Orleans se hostitelé zaregistrují v databázi a používají ji k vyhledání a vytvoření clusteru. Ukládají, které servery jsou členy kterých sil v databázové tabulce. K uložení těchto informací můžete použít relační databáze nebo databáze NoSQL. V .NET.NET Aspire aplikaci je oblíbená volba pro uložení této tabulky Azure Table Storage.
Pokud chcete nakonfigurovat Orleans s clusteringem a úložištěm zrn v Azure, nainstalujte do hostitelského projektu aplikace balíček NuGet pro 📦Aspire.Hostování.Azure. úložiště.
dotnet add package Aspire.Hosting.Azure.Storage
V hostitelském projektu aplikace, po volání AddOrleans, nakonfigurujte prostředek Orleans s využitím clusteringu a úložištěm grainu, a to pomocí metod WithClustering a WithGrainStorage.
// Add the resources which you will use for Orleans clustering and
// grain state storage.
var storage = builder.AddAzureStorage("storage").RunAsEmulator();
var clusteringTable = storage.AddTables("clustering");
var grainStorage = storage.AddBlobs("grain-state");
// Add the Orleans resource to the Aspire DistributedApplication
// builder, then configure it with Azure Table Storage for clustering
// and Azure Blob Storage for grain storage.
var orleans = builder.AddOrleans("default")
.WithClustering(clusteringTable)
.WithGrainStorage("Default", grainStorage);
Předchozí kód určuje Orleans, že jakákoli služba, která na něj odkazuje, musí také odkazovat na prostředek clusteringTable
.
Přidání projektu Orleansserver v hostiteli aplikace
Teď můžete do svého řešení přidat nový projekt zaregistrovaný v orchestraci .NET Aspire jako Orleansserver. Bude se účastnit clusteru Orleans jako silo s konstitučními zrny. Pomocí WithReference(orleans)
odkažte na zdroj Orleans z projektu server. Když odkazujete na prostředek Orleans ze své služby, tyto prostředky jsou také odkazovány:
// Add your server project and reference your 'orleans' resource from it.
// It can join the Orleans cluster as a silo.
// This implicitly adds references to the required resources.
// In this case, that is the 'clusteringTable' resource declared earlier.
builder.AddProject<Projects.OrleansServer>("silo")
.WithReference(orleans)
.WithReplicas(3);
Přidání projektu Orleansclient v hostiteli aplikace
Orleans klienti komunikují s zrny hostovanými na Orleans serverech. V .NET Aspire aplikaci můžete mít například front-endový web, který volá zrnka v clusteru Orleans. Pomocí WithReference(orleans.AsClient())
odkazujte na prostředek Orleans z vašeho Orleansclient.
// Reference the Orleans resource as a client from the 'frontend'
// project so that it can connect to the Orleans cluster.
builder.AddProject<Projects.OrleansClient>("frontend")
.WithReference(orleans.AsClient())
.WithExternalHttpEndpoints()
.WithReplicas(3);
Vytvoření projektu Orleansserver
Teď, když je hostitelský projekt aplikace dokončený, můžete implementovat Orleansserver projekt. Začněme přidáním potřebných balíčků NuGet:
Ve složce projektu Orleansserver spusťte tyto příkazy:
dotnet add package Aspire.Azure.Data.Tables
dotnet add package Aspire.Azure.Storage.Blobs
dotnet add package Microsoft.Orleans.Server
dotnet add package Microsoft.Orleans.Persistence.AzureStorage
dotnet add package Microsoft.Orleans.Clustering.AzureStorage
Dále v souboru Program.cs vašeho projektu Orleansserver přidejte klienty pro objekty blob a tabulky služby Azure Storage a poté zavolejte UseOrleans.
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();
builder.AddKeyedAzureTableClient("clustering");
builder.AddKeyedAzureBlobClient("grain-state");
builder.UseOrleans();
Následující kód je úplný příklad projektu Orleansserver, včetně entity s názvem CounterGrain
:
using Orleans.Runtime;
using OrleansContracts;
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();
builder.AddKeyedAzureTableClient("clustering");
builder.AddKeyedAzureBlobClient("grain-state");
builder.UseOrleans();
var app = builder.Build();
app.MapGet("/", () => "OK");
await app.RunAsync();
public sealed class CounterGrain(
[PersistentState("count")] IPersistentState<int> count) : ICounterGrain
{
public ValueTask<int> Get()
{
return ValueTask.FromResult(count.State);
}
public async ValueTask<int> Increment()
{
var result = ++count.State;
await count.WriteStateAsync();
return result;
}
}
Vytvoření projektu Orleansclient
V projektu Orleansclient přidejte stejné balíčky NuGet:
dotnet add package Aspire.Azure.Data.Tables
dotnet add package Aspire.Azure.Storage.Blobs
dotnet add package Microsoft.Orleans.Client
dotnet add package Microsoft.Orleans.Persistence.AzureStorage
dotnet add package Microsoft.Orleans.Clustering.AzureStorage
Dále v souboru Program.cs projektu Orleansclient přidejte client úložiště tabulek Azure a pak volejte UseOrleansClient.
builder.AddKeyedAzureTableClient("clustering");
builder.UseOrleansClient();
Následující kód je úplným příkladem projektu Orleansclient. Volá zrno CounterGrain
definované v příkladu Orleansserver výše uvedeném:
using OrleansContracts;
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();
builder.AddKeyedAzureTableClient("clustering");
builder.UseOrleansClient();
var app = builder.Build();
app.MapGet("/counter/{grainId}", async (IClusterClient client, string grainId) =>
{
var grain = client.GetGrain<ICounterGrain>(grainId);
return await grain.Get();
});
app.MapPost("/counter/{grainId}", async (IClusterClient client, string grainId) =>
{
var grain = client.GetGrain<ICounterGrain>(grainId);
return await grain.Increment();
});
app.UseFileServer();
await app.RunAsync();
Povolení OpenTelemetry
Podle konvence zahrnují .NET.NET Aspire řešení projekt pro definování výchozí konfigurace a chování vaší služby. Tento projekt se nazývá projekt VýchozíNastaveníSlužby a šablony ho vytvoří s názvem končícím na ServiceDefaults. Pokud chcete nakonfigurovat Orleans pro OpenTelemetry v .NET Aspire, použijte konfiguraci pro výchozí projekt služby podle Orleans průvodce pozorovatelnostmi.
Upravte metodu
public static IHostApplicationBuilder ConfigureOpenTelemetry(this IHostApplicationBuilder builder)
{
builder.Logging.AddOpenTelemetry(logging =>
{
logging.IncludeFormattedMessage = true;
logging.IncludeScopes = true;
});
builder.Services.AddOpenTelemetry()
.WithMetrics(metrics =>
{
metrics.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddRuntimeInstrumentation()
.AddMeter("Microsoft.Orleans");
})
.WithTracing(tracing =>
{
tracing.AddSource("Microsoft.Orleans.Runtime");
tracing.AddSource("Microsoft.Orleans.Application");
tracing.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation();
});
builder.AddOpenTelemetryExporters();
return builder;
}
Podporovaní poskytovatelé
Integrace OrleansAspire dnes podporuje omezenou podmnožinu poskytovatelů Orleans:
- Shlukování:
- Redis
- tabulky úložiště Azure
- Perzistence:
- Redis
- tabulky úložiště Azure
- Azure Blobů úložiště
- Upomínky:
- Redis
- tabulky úložiště Azure
- Adresář zrna
- Redis
- tabulky úložiště Azure
Poskytovatelé streamování nejsou podporováni ve verzi Orleans 8.1.0.