Sdílet prostřednictvím


Použití Dapr s .NET Aspire

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 spolupracují pro zlepšení vašeho místního vývojového prostředí. Pomocí Dapr s .NET Aspirese můžete soustředit na psaní a implementaci distribuovaných aplikací založených na .NETmísto toho, abyste strávili čas navíc s místním onboardingem.

V této příručce se dozvíte, jak využívat abstrakci Dapra konfigurační doporučení .NET Aspirepro cloudové technologie k vytváření jednoduchých, přenosných, odolných a zabezpečených mikroslužeb ve velkém měřítku na Azure.

Požadavky

Pokud chcete pracovat s .NET.NET Aspire, potřebujete místně nainstalovat následující:

Další informace najdete v tématu .NET.NET Aspire nastavení a nástrojea .NET.NET Aspire SDK.

Kromě požadavků pro .NET.NET Aspirebudete potřebovat:

  • 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 popsané v Inicializace Dapr v místním prostředí.

Důležitý

Pokud se pokusíte spustit aplikaci bez rozhraní příkazového řádku Dapr, zobrazí se následující chyba:

Unable to locate the Dapr CLI.

Začít

Abyste mohli začít, musíte přidat hostingový balíček Dapr do hostitelského projektu aplikace instalací balíčku NuGet 📦Aspire.Hosting.Dapr.

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 Dapr sajdkáru

používá vzor sajdkáru ke spuštění společně s vaší aplikací. Dapr sidecar běží společně s vaší aplikací jako lehký, přenosný a bezstavový HTTP server komponent, který naslouchá příchozím HTTP požadavkům z vaší aplikace.

Chcete-li k prostředku .NET.NET Aspire přidat sidecar, zavolejte metodu WithDaprSidecar na požadovaném prostředku. Parametr appId je jedinečný identifikátor aplikace Dapr, ale je volitelný. Pokud appIdnezadá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();

Metoda WithDaprSidecar nabízí možnosti přetížení ke konfiguraci možností sidecaru Dapr, jako je ID aplikace a 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()
{
    DaprGrpcPort = 50001,
    DaprHttpPort = 3500,
    MetricsPort = 9090
};

builder.AddProject<Projects.Dapr_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithReference(apiService)
    .WithDaprSidecar(sidecarOptions);

Dohromady vzato, zvažte následující příklad projektu hostování aplikací .NET.NET Aspire, který zahrnuje:

  • Back-endové rozhraní API, které deklaruje sidecar typu Dapr s výchozími nastaveními.
  • Frontend, který deklaruje Dapr sidecar 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()
{
    DaprGrpcPort = 50001,
    DaprHttpPort = 3500,
    MetricsPort = 9090
};

builder.AddProject<Projects.Dapr_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithReference(apiService)
    .WithDaprSidecar(sidecarOptions);

builder.Build().Run();

Řídicí panel .NET Aspire zobrazuje Dapr sidecar jako prostředek se stavem a logy.

řídicí panel .NET Aspire zobrazující zdroje postranního auta Dapr

Přidání sady Dapr SDK

Pokud chcete používat rozhraní API Dapr z prostředků .NET Aspire, můžete použít 📦Dapr. AspNetCore/. 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

Po instalaci do projektu ASP.NET Core je možné sadu SDK přidat do tvůrce služeb.

builder.Services.AddDaprClient();

Instance DaprClient se teď dá vložit do vašich služeb, aby bylo možné interagovat se Dapr sidecarem prostřednictvím 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 je metoda, která odešle HTTP požadavek na Dapr sidecar. Jedná se o obecnou metodu, která přijímá:

  • Příkaz HTTP
  • ID aplikace Dapr služby, která se má volat
  • Název metody
  • Token pro 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:

  • Dapr client jsou přidávány do tvůrce služeb
  • Třída WeatherApiClient, která používá Daprclient 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 lze třídu WeatherApiClient vložit do integrace 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ě.

Dapr a .NET Aspire

Na první pohled mohou Dapr a .NET Aspire vypadat, jako by měly překrývající se funkčnost, a skutečně mají. Oba ale používají jiný přístup. .NET .NET Aspire je názorný přístup k vytváření distribuovaných aplikací na cloudové platformě. Dapr je modul runtime, který abstrahuje běžné složitosti základní cloudové platformy. 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.

.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í:

Další kroky