integrace .NET AspireDapr
Distributed Application Runtime (Dapr) nabízí rozhraní API pro vývojáře, která slouží jako konduit pro interakci s jinými službami a závislostmi a abstrakci aplikace od specifik těchto služeb a závislostí. Dapr a .NET Aspire můžou spolupracovat na zlepšení místního prostředí pro vývoj. Pomocí Dapr s .NET Aspirese můžete soustředit na psaní a implementaci distribuovaných aplikací založených na .NETmísto místního onboardingu.
V této příručce se dozvíte, jak využívat abstrakce nástroje Dapra přednastavenou konfiguraci nástroje .NET Aspirepro vytváření jednoduchých, přenosných, odolných a zabezpečených mikroslužeb ve velkém měřítku.
Porovnání .NET Aspire a Dapr
Na první pohled mohou Dapr a .NET Aspire vypadat, jako by měly překrývající se funkčnost, a skutečně mají. Používají ale různé přístupy. .NET .NET Aspire má výslovný názor na to, jak vytvářet distribuované aplikace na cloudové platformě, a soustředí se na zlepšení místního vývojového prostředí. Dapr je modul runtime, který abstrahuje běžné složitosti základní cloudové platformy během vývoje i v produkčním prostředí. Spoléhá na sidecary, aby poskytovaly abstrakce pro oblasti jako konfigurace, správa tajemství a zasílání zpráv. Základní technologie je možné snadno přepínat prostřednictvím konfiguračních souborů, zatímco váš kód se nemusí měnit.
Aspekt | .NET Aspire | Dapr |
---|---|---|
Účel | Navržená tak, aby usnadnila vývoj řešení nativních pro cloud na místních vývojových počítačích. | Navržena k tomu, aby usnadnila vývoj a spouštění distribuovaných aplikací pomocí běžných rozhraní API, která se dají snadno vyměnit. |
Rozhraní api | Vývojáři musí volat rozhraní API zdrojů pomocí specifických SDK. | Vývojáři volají rozhraní API v Dapr sidecaru, který přesměruje volání na správné rozhraní API. Je snadné vyměnit rozhraní API bez změny kódu v mikroslužbách. |
Jazyky | Mikroslužby píšete v .NET jazycích, Go, Python, JavaScriptu a dalších. | Funkce Dapr sajdkáru můžete volat v libovolném jazyce, který podporuje rozhraní HTTP/gRPC. |
Zásady zabezpečení | Nezahrnuje zásady zabezpečení, ale může bezpečně nakonfigurovat připojení mezi závislými prostředky. | Zahrnuje přizpůsobitelné zásady zabezpečení, které řídí, které mikroslužby mají přístup k jiným službám nebo prostředkům. |
Nasazení | Existují nástroje pro nasazení pro Azure a Kubernetes. | Nezahrnuje nástroje pro nasazení. Aplikace se obvykle nasazují se systémy kontinuální integrace nebo průběžného vývoje (CI/CD). |
Palubní deska | Poskytuje komplexní přehled o prostředcích a jejich telemetrii a podporuje naslouchání všem podporovaným prostředkům OTEL. | Omezeno na pouze Dapr zdroje. |
.NET Aspire usnadňuje nastavení a ladění Dapr aplikací tím, že poskytuje jednoduché rozhraní API pro konfiguraci Dapr sidecarů a prezentaci sidecarů jako prostředků na řídicím panelu.
Prozkoumání komponent Dapr pomocí .NET Aspire
Dapr poskytuje mnoho integrovaných komponenta při použití Dapr s .NET Aspire můžete tyto komponenty snadno prozkoumat a nakonfigurovat. Nezaměňujte tyto komponenty s integracemi .NET.NET Aspire. Představte si například následující:
- Dapr– Státní úložiště: Voláním AddDaprStateStore přidáte nakonfigurované státní úložiště do projektu .NET.NET Aspire.
- Dapr— Pub Sub: Zavolejte AddDaprPubSub pro přidání nakonfigurovaného pub sub systému do vašeho projektu .NET.NET Aspire.
- Dapr— Komponenty: Pro přidání nakonfigurované integrace do projektu AddDaprComponent.NET volejte .NET Aspire.
Instalace Dapr
Tato integrace vyžaduje Dapr verze 1.13 nebo novější. Informace o instalaci Daprnajdete v tématu Daprrozhraní příkazového řádku . Po instalaci rozhraní příkazového řádku Dapr spusťte dapr init
podle popisu v části Inicializace Dapr ve vašem místním prostředí.
Důležitý
Pokud se pokusíte spustit řešení .NET Aspire bez rozhraní příkazového řádku Dapr, zobrazí se následující chyba:
Unable to locate the Dapr CLI.
Integrace hostování
V řešení .NET Aspire přidejte balíček NuGet 📦Aspire.Hosting.Dapr do projektu hostitele aplikace , abyste integrovali Dapr a přistupovali k jeho typům a rozhraním API.
dotnet add package Aspire.Hosting.Dapr
Další informace najdete v tématu dotnet add package nebo Správa závislostí balíčků v aplikacích .NET.
Přidejte přívěs Dapr k prostředkům .NET Aspire
Dapr používá vzor sajdkáry . Dapr sidecar běží společně s vaší aplikací jako jednoduchý, přenosný a bezstavový server HTTP, který naslouchá příchozím požadavkům HTTP z vaší aplikace.
Pokud chcete k .NET.NET Aspire zdroji přidat postranní kočár, zavolejte metodu WithDaprSidecar. Parametr appId
je jedinečný identifikátor aplikace Dapr, ale je volitelný. Pokud appId
nezadáte, použije se místo toho název nadřazeného prostředku.
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
Konfigurujte Dapr pomocné aplikace
Metoda WithDaprSidecar
nabízí přetížení funkcí pro konfiguraci možností sidecaru Dapr, jako je AppId
a různé porty. V následujícím příkladu je Dapr sidecar nakonfigurovaný se specifickými porty pro GRPC, HTTP, metriky a určité ID aplikace.
DaprSidecarOptions sidecarOptions = new()
{
AppId = "FirstSidecar",
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
Úplný příklad hostitele aplikace Dapr
Dohromady vzato, zvažte následující příklad projektu hostování aplikací .NET.NET Aspire, který zahrnuje:
- Zadní API služba, která deklaruje sidecar Dapr s přednastavením.
- Webový frontendový projekt, který deklaruje sidecar Dapr s konkrétními možnostmi, jako jsou explicitní porty.
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();
Když spustíte řešení .NET Aspire, na řídicím panelu se zobrazí postranní kontejner Dapr jako zdroj, včetně jeho stavu a protokolů.
Používejte Dapr sidecary při práci na projektech .NET Aspire
Pokud chcete používat rozhraní API Dapr z prostředků .NET Aspire, můžete použít 📦Dapr.AspNetCore/ balíček NuGet. Dapr SDK poskytuje rozhraní API k interakci s Dapr sidecary.
Poznámka
Pro integraci Dapr.AspNetCore
s Dapr použijte knihovnu ASP.NET (integrace DI, registrace předplatných atd.). Aplikace, které nejsouASP.NET (například konzolové aplikace), mohou jednoduše použít 📦Dapra pomocíClient provádět volání přes službu Dapr sidecar.
dotnet add package Dapr.AspNetCore
Přidání klienta Dapr
Po instalaci do projektu ASP.NET Core je možné sadu SDK přidat do tvůrce služeb.
builder.Services.AddDaprClient();
Vyvolání metod Dapr
Instance DaprClient
můžete nyní vložit do svých služeb, aby bylo možné komunikovat s Dapr sidecarem pomocí sady SDK Dapr.
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
je metoda, která odešle HTTP požadavek sidecaru Dapr. Jedná se o obecnou metodu, která přijímá:
- Příkaz HTTP.
- ID aplikace Dapr služby, kterou je třeba volat.
- Název metody.
- Token zrušení.
Podle HTTP metody může také obsahovat tělo požadavku a hlavičky. Parametr obecného typu je typem textu odpovědi.
Úplný soubor Program.cs pro front-endový projekt ukazuje:
- Klient Dapr přidaný do nástroje pro tvorbu služeb.
- Třída
WeatherApiClient
, která používá klienta Dapr k volání back-endové služby.
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();
Například v projektu Blazor můžete vložit třídu WeatherApiClient
na stránku Razor a použít ji k volání back-endové služby.
@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();
}
}
Při použití Dapr SDK se Dapr sidecar volá přes protokol HTTP. Dapr sajdkár pak požadavek předá cílové službě. Zatímco cílová služba běží v samostatném procesu než sidecaru, integrace související se službou běží v sidecaru Dapr a zodpovídá za objevování služby a směrování požadavku k cílové službě.