Verwenden Sie Dapr mit .NET Aspire
Verteilte Anwendungslaufzeit (Dapr) bietet Entwickler-APIs, die als Konduit für die Interaktion mit anderen Diensten und Abhängigkeiten dienen und die Anwendung aus den Besonderheiten dieser Dienste und Abhängigkeiten abstrahieren. Dapr und .NET Aspire zusammenarbeiten, um Ihre lokale Entwicklungserfahrung zu verbessern. Mithilfe von Dapr und .NET Aspirekönnen Sie sich auf das Schreiben und Implementieren von auf .NETbasierten verteilten Anwendungen konzentrieren, statt zusätzliche Zeit für das lokale Onboarding aufzuwenden.
In diesem Leitfaden erfahren Sie, wie Sie die Abstraktion von Daprund die strukturierte Konfiguration von .NET Aspirebei Cloud-Technologien nutzen können, um einfache, portable, widerstandsfähige und sichere Microservices in großem Maßstab auf Azurezu erstellen.
Voraussetzungen
Um mit .NET.NET Aspirezu arbeiten, benötigen Sie folgendes lokal installiert:
- .NET 8.0 oder .NET 9,0
- Eine OCI-kompatible Containerlaufzeit, z. B.:
- Docker Desktop oder Podman. Weitere Informationen finden Sie unter container runtime.
- Eine integrierte Entwicklerumgebung (Integrated Developer Environment, IDE) oder ein Code-Editor, z. B.:
- Visual Studio 2022 Version 17.9 oder höher (optional)
-
Visual Studio Code (optional)
- C# Dev Kit: Erweiterung (Optional)
- JetBrains Rider mit .NET.NET Aspire Plugin (optional)
Weitere Informationen finden Sie unter .NET.NET Aspire-Setup und -Toolsund .NET.NET Aspire-SDK.
Zusätzlich zu den Voraussetzungen für .NET.NET Aspirebenötigen Sie:
- Dapr Version 1.13 oder höher
Um Daprzu installieren, finden Sie unter Installationsanleitung für die Dapr CLI-. Nach der Installation der Dapr CLI führen Sie die in Initialize dapr init
beschriebenen Dapr in Ihrer lokalen Umgebungaus.
Wichtig
Wenn Sie versuchen, die App ohne die Dapr CLI auszuführen, wird die folgende Fehlermeldung angezeigt:
Unable to locate the Dapr CLI.
Loslegen
Um zu beginnen, müssen Sie das Dapr Hosting-Paket zu Ihrem App-Host-Projekt hinzufügen, indem Sie das 📦Aspire.Hosting.Dapr NuGet-Paket installieren.
dotnet add package Aspire.Hosting.Dapr
Weitere Informationen finden Sie unter dotnet add package oder Verwalten von Paketabhängigkeiten in .NET-Anwendungen.
Hinzufügen eines Dapr Beiwagens
Dapr verwendet das Sidecar-Muster, um zusammen mit Ihrer Anwendung zu laufen. Das Dapr-Sidecar wird zusammen mit Ihrer App als einfache, tragbare und zustandslose HTTP-server ausgeführt, die auf eingehende HTTP-Anforderungen Ihrer App wartet.
Rufen Sie zum Hinzufügen eines Sidecars zu einer .NET.NET Aspire Ressource die WithDaprSidecar Methode für die gewünschte Ressource auf. Der appId
-Parameter ist der eindeutige Bezeichner für die Dapr Anwendung, ist aber optional. Wenn Sie keine appId
angeben, wird stattdessen der übergeordnete Ressourcenname verwendet.
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
Die WithDaprSidecar
-Methode bietet Überladungen zum Konfigurieren Ihrer Dapr Sidecar-Optionen wie App-ID und Ports. Im folgenden Beispiel wird das Dapr Sidecar mit bestimmten Ports für GRPC, HTTP, Metriken und eine bestimmte App-ID konfiguriert.
DaprSidecarOptions sidecarOptions = new()
{
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
Betrachten Sie das folgende Beispiel für ein .NET.NET Aspire App-Hostprojekt, das Folgendes umfasst:
- Eine Back-End-API, die ein Dapr Sidecar mit Standardeinstellungen deklariert.
- Ein Frontend, das ein Dapr Sidecar mit bestimmten Optionen deklariert, z. B. Explict-Ports.
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
DaprSidecarOptions sidecarOptions = new()
{
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
builder.Build().Run();
Im .NET Aspire-Dashboard wird das Dapr-Sidecar als Ressource zusammen mit seinem Status und Protokollen angezeigt.
Hinzufügen des Dapr SDK
Um Dapr APIs aus .NET Aspire Ressourcen zu verwenden, können Sie die 📦Daprverwenden. AspNetCore/. Das Dapr SDK bietet eine Reihe von APIs für die Interaktion mit Dapr Sidecars.
Anmerkung
Verwenden Sie die Dapr.AspNetCore
-Bibliothek für die Dapr-Integration mit ASP.NET (DI-Integration, Registrierung von Abonnements usw.). Nicht-ASP.NET-Apps (z. B. Konsolen-Apps) können einfach die 📦Daprverwenden.Client Anrufe über das Dapr Sidecar zu tätigen.
dotnet add package Dapr.AspNetCore
Nach der Installation in einem ASP.NET Core Projekt kann das SDK dem Service Builder hinzugefügt werden.
builder.Services.AddDaprClient();
Eine Instanz von DaprClient
kann nun in Ihre Dienste eingefügt werden, um mit dem Dapr Sidecar über das Dapr SDK zu interagieren.
using Dapr.Client;
namespace Dapr.Web;
public class WeatherApiClient(DaprClient client)
{
public async Task<WeatherForecast[]> GetWeatherAsync(
int maxItems = 10, CancellationToken cancellationToken = default)
{
List<WeatherForecast>? forecasts =
await client.InvokeMethodAsync<List<WeatherForecast>>(
HttpMethod.Get,
"apiservice",
"weatherforecast",
cancellationToken);
return forecasts?.Take(maxItems)?.ToArray() ?? [];
}
}
public record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
InvokeMethodAsync
ist eine Methode, die eine HTTP-Anforderung an das Dapr Sidecar sendet. Es handelt sich um eine generische Methode, die Folgendes verwendet:
- Ein HTTP-Verb
- Die Dapr App-ID des Diensts, der aufgerufen werden soll
- Der Methodenname
- Ein Abbruchs-Token
Je nach HTTP-Verb kann es auch einen Anforderungstext und Header annehmen. Der generische Typparameter ist der Typ des Antwortkörpers.
Die vollständige Program.cs Datei für das Frontend-Projekt zeigt:
- Das Hinzufügen von Daprclient zum Service Builder
- Die
WeatherApiClient
Klasse, die die Daprclient zum Aufrufen des Backend-Dienstes verwendet
using Dapr.Web;
using Dapr.Web.Components;
var builder = WebApplication.CreateBuilder(args);
// Add service defaults & Aspire components.
builder.AddServiceDefaults();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddOutputCache();
builder.Services.AddDaprClient();
builder.Services.AddTransient<WeatherApiClient>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseOutputCache();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.MapDefaultEndpoints();
app.Run();
In einem Blazor Projekt kann beispielsweise die WeatherApiClient
Klasse in eine Integration eingefügt und zum Aufrufen des Back-End-Diensts verwendet werden.
@page "/weather"
@attribute [StreamRendering(true)]
@attribute [OutputCache(Duration = 5)]
@inject WeatherApiClient WeatherApi
<PageTitle>Weather</PageTitle>
<h1>Weather</h1>
<p>This component demonstrates showing data loaded from a backend API service.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = await WeatherApi.GetWeatherAsync();
}
}
Wenn das Dapr SDK verwendet wird, wird das Dapr Sidecar über HTTP aufgerufen. Der Dapr Sidecar leitet dann die Anforderung an den Zieldienst weiter. Während der Zieldienst in einem separaten Prozess als der Sidecar ausgeführt wird, läuft die dienstbezogene Integration im Dapr Sidecar und ist für die Dienstentdeckung und das Routing der Anfrage an den Zieldienst verantwortlich.
Dapr und .NET Aspire
Auf den ersten Blick können Dapr und .NET Aspire so aussehen, als hätten sie überlappende Funktionen, und das tun sie auch. Beide haben jedoch einen anderen Ansatz. .NET .NET Aspire ist ein subjektiver Ansatz zur Entwicklung verteilter Anwendungen auf einer Cloud-Plattform. Dapr ist eine Laufzeitumgebung, die die allgemeinen Komplexitäten der zugrunde liegenden Cloudplattform vereinfacht. Es basiert auf Sidecars, um Abstraktionen für Dinge wie Konfiguration, geheime Verwaltung und Messaging bereitzustellen. Die zugrunde liegende Technologie kann einfach über Konfigurationsdateien umgeschaltet werden, während der Code nicht geändert werden muss.
.NET Aspire erleichtert das Einrichten und Debuggen von Dapr Anwendungen, indem es eine einfache API zum Konfigurieren von Dapr Sidecars bereitstellt und die Sidecars im Dashboard als Ressourcen sichtbar macht.
Erkunden Sie Dapr-Komponenten mit .NET Aspire
Dapr bietet viele integrierte Komponenten, und wenn Sie Dapr mit .NET Aspire verwenden, können Sie diese Komponenten ganz einfach untersuchen und konfigurieren. Verwechseln Sie diese Komponenten nicht mit .NET.NET Aspire Integrationen. Betrachten Sie beispielsweise Folgendes:
- Dapr– Zustandsspeicher: Rufen Sie AddDaprStateStore auf, um Ihrem .NET.NET Aspire Projekt einen konfigurierten Zustandsspeicher hinzuzufügen.
- Dapr– Pub Sub: Rufen Sie AddDaprPubSub auf, um Ihrem .NET.NET Aspire Projekt ein konfiguriertes Pub Sub hinzuzufügen.
- Dapr– Komponenten: Rufen Sie AddDaprComponent auf, um eine konfigurierte Integration zu Ihrem Projekt .NET.NET Aspire hinzuzufügen.