integratie van .NET AspireDapr
Distributed Application Runtime (Dapr) biedt ontwikkelaars-API's die fungeren als een kanaal voor interactie met andere services en afhankelijke modules en haalt de toepassing los van de specifieke kenmerken van deze services en modules. Dapr en .NET Aspire kunnen samenwerken om uw lokale ontwikkelervaring te verbeteren. Door Dapr te gebruiken met .NET Aspire, kunt u zich richten op het schrijven en implementeren van gedistribueerde .NETtoepassingen in plaats van lokaal onboarden.
In deze handleiding leert u hoe u kunt profiteren van de abstractie van Dapren de opiniërende configuratie van .NET Aspirevan cloudtechnologieën om eenvoudige, draagbare, veerkrachtige en beveiligde microservices op schaal te bouwen.
Vergelijking van .NET Aspire en Dapr
Op het eerste gezicht zien Dapr en .NET Aspire er mogelijk uit alsof ze overlappende functionaliteit hebben en dat wel. Ze hebben echter verschillende benaderingen. .NET .NET Aspire is van mening over het bouwen van gedistribueerde toepassingen op een cloudplatform en is gericht op het verbeteren van de lokale ontwikkelervaring. Dapr is een runtime die de gemeenschappelijke complexiteit van het onderliggende cloudplatform abstraheert tijdens de ontwikkeling en in productie. Het is afhankelijk van sidecars om abstracties te bieden voor zaken als configuratie, geheimbeheer en berichten. De onderliggende technologie kan eenvoudig worden overgeschakeld via configuratiebestanden, terwijl uw code niet hoeft te veranderen.
Aspect | .NET Aspire | Dapr |
---|---|---|
Doel | Ontworpen om het eenvoudiger te maken om cloudeigen oplossingen te ontwikkelen op lokale ontwikkelcomputers. | Ontworpen om het eenvoudiger te maken om gedistribueerde apps te ontwikkelen en uit te voeren met algemene API's die eenvoudig kunnen worden gewisseld. |
API's | Ontwikkelaars moeten resource-API's aanroepen met behulp van hun specifieke SDK's | Ontwikkelaars roepen API's aan in de Dapr sidecar, waarmee de aanroep naar de juiste API wordt doorgestuurd. Het is eenvoudig om resource-API's te wisselen zonder code in uw microservices te wijzigen. |
Talen | U schrijft microservices in .NET talen, Go, Python, Javascript en andere. | U kunt Dapr sidecar-functies aanroepen in elke taal die HTTP/gRPC-interfaces ondersteunt. |
Beveiligingsbeleid | Bevat geen beveiligingsbeleid, maar kan verbindingen tussen afhankelijke resources veilig configureren. | Bevat aanpasbare beveiligingsbeleidsregels die bepalen welke microservices toegang hebben tot andere services of resources. |
Implementatie | Er zijn implementatiehulpprogramma's voor Azure en Kubernetes. | Bevat geen implementatiehulpprogramma's. Apps worden meestal geïmplementeerd met CI/CD-systemen (Continuous Integration/Continuous Development). |
Dashboard | Biedt een uitgebreid overzicht van de middelen en hun telemetrie en ondersteunt het monitoren van elke door OTEL ondersteunde bron. | Beperkt tot alleen Dapr bronnen. |
.NET Aspire maakt het instellen en opsporen van fouten in Dapr toepassingen eenvoudiger door een eenvoudige API te bieden voor het configureren van Dapr sidecars en door de sidecars weer te geven als resources in het dashboard.
Dapr onderdelen verkennen met .NET Aspire
Dapr biedt veel ingebouwde onderdelenen wanneer u Dapr gebruikt met .NET Aspire kunt u deze onderdelen eenvoudig verkennen en configureren. Verwar deze onderdelen niet met .NET.NET Aspire integraties. Denk bijvoorbeeld aan het volgende:
- Dapr— Staatsarchief: Oproep AddDaprStateStore om een geconfigureerd staatsarchief toe te voegen aan uw .NET.NET Aspire project.
- Dapr— Pub-sub: roep AddDaprPubSub aan om een geconfigureerde pubsub aan uw .NET.NET Aspire project toe te voegen.
- Dapr— Onderdelen: AddDaprComponent aanroepen om een geconfigureerde integratie toe te voegen aan uw .NET.NET Aspire project.
Dapr installeren
Voor deze integratie is Dapr versie 1.13 of hoger vereist. Om Daprte installeren, zie voor de installatie van Dapr CLI. Nadat u de Dapr CLI hebt geïnstalleerd, voert u de dapr init
uit, zoals beschreven in Initialiseer Dapr in uw lokale omgeving.
Belangrijk
Als u probeert de .NET Aspire oplossing uit te voeren zonder de Dapr CLI, wordt de volgende fout weergegeven:
Unable to locate the Dapr CLI.
Hostingintegratie
Voeg in uw .NET Aspire-oplossing het 📦Aspire.HostingDapr NuGet-pakket toe in het -app-hostproject om Dapr te integreren en toegang te krijgen tot de typen en API's.
dotnet add package Aspire.Hosting.Dapr
Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.
Dapr sidecar toevoegen aan .NET Aspire resources
Dapr maakt gebruik van het sidecar-patroon. De Dapr sidecar draait naast uw app als een lichtgewicht, draagbare en stateless HTTP-server die luistert naar HTTP-aanvragen aan uw app.
Als u een sidecar wilt toevoegen aan een .NET.NET Aspire-resource, gebruik dan de WithDaprSidecar-methode daarop. De parameter appId
is de unieke id voor de Dapr toepassing, maar dit is optioneel. Als u geen appId
opgeeft, wordt in plaats daarvan de naam van de ouderresource gebruikt.
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
Dapr sidecars configureren
De methode WithDaprSidecar
biedt overbelastingen voor het configureren van uw Dapr sidecar-opties, zoals AppId
en verschillende poorten. In het volgende voorbeeld is de Dapr sidecar geconfigureerd met specifieke poorten voor GRPC, HTTP, metrische gegevens en een specifieke app-id.
DaprSidecarOptions sidecarOptions = new()
{
AppId = "FirstSidecar",
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
Voorbeeld van Dapr app-host voltooien
Denk aan het volgende voorbeeld van een .NET.NET Aspire app-hostproject dat alles samenbrengt:
- Een back-end-API-service die een Dapr sidecar met standaardinstellingen declareert.
- Een webfrontendproject dat een Dapr sidecar declareert met specifieke opties, zoals expliciete poorten.
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
DaprSidecarOptions sidecarOptions = new()
{
AppId = "FirstSidecar",
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
builder.Build().Run();
Wanneer u de .NET Aspire-oplossing start, toont het dashboard de Dapr sidecar als resource, met de status en logboeken.
Gebruik Dapr sidecars bij het toepassen van .NET Aspire projecten
Als u Dapr API's van .NET Aspire resources wilt gebruiken, kunt u het NuGet-pakket 📦Dapr/.AspNetCore/ gebruiken. De Dapr SDK biedt een set API's voor interactie met Dapr sidecars.
Notitie
Gebruik de Dapr.AspNetCore
-bibliotheek voor de Dapr-integratie met ASP.NET (DI-integratie, registratie van abonnementen, enzovoort). Niet-ASP.NET apps (zoals console-apps) kunnen alleen de 📦Daprgebruiken.Client bellen via de Dapr sidecar.
dotnet add package Dapr.AspNetCore
Dapr-client toevoegen
Nadat de SDK is geïnstalleerd in een ASP.NET Core-project, kan de SDK worden toegevoegd aan de servicebouwer.
builder.Services.AddDaprClient();
Dapr-methoden aanroepen
Een exemplaar van DaprClient
kan nu worden geïntegreerd in uw services om te kunnen communiceren met de Dapr-sidecar via de Dapr-SDK.
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
is de methode waarmee een HTTP-aanvraag naar de Dapr sidecar wordt verzonden. Het is een generieke methode die:
- Een HTTP-woord.
- De Dapr app-ID van de service die moet worden aangeroepen.
- De naam van de methode.
- Een annuleringstoken.
Afhankelijk van het HTTP-werkwoord kan het ook een verzoekbody en headers bevatten. De generieke typeparameter is het type van het antwoordlichaam.
In het volledige Program.cs bestand voor het front-endproject ziet u:
- De Dapr-client die wordt toegevoegd aan de servicebouwer.
- De
WeatherApiClient
-klasse die gebruikmaakt van de Dapr-client om de back-endservice aan te roepen.
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 een Blazor-project kunt u de WeatherApiClient
-klasse bijvoorbeeld invoegen in een razor-pagina en deze gebruiken om de back-endservice aan te roepen:
@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();
}
}
Wanneer de Dapr SDK wordt gebruikt, wordt de Dapr sidecar aangeroepen via HTTP. De Dapr sidecar stuurt de aanvraag vervolgens door naar de doelservice. Terwijl de doeldienst wordt uitgevoerd in een afzonderlijk proces dan de sidecar, wordt de integratie die verband houdt met de dienst uitgevoerd in de Dapr sidecar en is verantwoordelijk voor dienstontdekking en het routeren van het verzoek naar de doeldienst.