.NET Aspire Dapr entegrasyonu
Dağıtılmış Uygulama Çalışma Zamanı (Dapr), diğer hizmetler ve bağımlılıklarla etkileşime geçiş için bir kanal görevi gören ve uygulamayı bu hizmetlerin ve bağımlılıkların özelliklerinden soyutlayan geliştirici API'leri sunar. Dapr ve .NET Aspire, yerel geliştirme deneyiminizi geliştirmek için birlikte çalışabilir. .NET Aspireile Dapr kullanarak yerel yerleşik uygulama yerine .NETtabanlı dağıtılmış uygulamalar yazmaya ve uygulamaya odaklanabilirsiniz.
Bu kılavuzda, büyük ölçekte basit, taşınabilir, dayanıklı ve güvenli mikro hizmetler oluşturmak için Daprsoyutlama ve .NET Aspirebulut teknolojilerinin genel yapılandırmasından nasıl yararlanacağınızı öğreneceksiniz.
.NET Aspire ve Dapr karşılaştırma
İlk bakışta Dapr ve .NET Aspire çakışan işlevlere sahip gibi görünebilirler ve örtüşüyorlar. Ancak, farklı yaklaşımlar benimserler. .NET .NET Aspire, bulut platformunda dağıtılmış uygulamaların nasıl oluşturulması gerektiği konusunda kesin fikirlere sahip olup, yerel geliştirme deneyimini iyileştirmeye odaklanır. Dapr, hem geliştirme hem de üretim sırasında temel alınan bulut platformunun ortak karmaşıklıklarını soyutlayan bir çalışma zamanıdır. Yan hizmetler, yapılandırma, gizli yönetimi ve mesajlaşma gibi konularda soyutlamalar sağlamak için kullanılır. Yapılandırma dosyaları aracılığıyla temel alınan teknoloji kolayca değiştirilebilirken, kodunuzun değiştirilmesine gerek yoktur.
Görünüm | .NET Aspire | Dapr |
---|---|---|
Amaç | Yerel geliştirme bilgisayarlarında bulutta yerel çözümler geliştirmeyi kolaylaştırmak için tasarlanmıştır. | Kolayca değiştirilebilen ortak API'lerle dağıtılmış uygulamalar geliştirmeyi ve çalıştırmayı kolaylaştırmak için tasarlanmıştır. |
API'ler | Geliştiricilerin belirli SDK'larını kullanarak kaynak API'lerini çağırması gerekir | Geliştiriciler, Dapr sidecar'ında API'leri çağırır, bu da çağrıyı doğru API'ye iletir. Mikro hizmetlerinizde kod değiştirmeden kaynak API'lerini kolayca değiştirebilirsiniz. |
Diller | Mikro hizmetleri .NET dillerde, Go, Python, Javascript ve diğer dillerde yazarsınız. | HTTP/gRPC arabirimlerini destekleyen herhangi bir dilde Dapr sepet işlevlerini çağırabilirsiniz. |
Güvenlik ilkeleri | Güvenlik ilkelerini içermez, ancak bağımlı kaynaklar arasındaki bağlantıları güvenli bir şekilde yapılandırabilir. | Hangi mikro hizmetlerin diğer hizmetlere veya kaynaklara erişimi olduğunu denetleyen özelleştirilebilir güvenlik ilkeleri içerir. |
Dağıtım | Azure ve Kubernetesiçin dağıtım araçları vardır. | Dağıtım araçlarını içermez. Uygulamalar genellikle Sürekli Tümleştirme/Sürekli Geliştirme (CI/CD) sistemleriyle dağıtılır. |
Kontrol Paneli | Kaynakların ve telemetri verilerinin kapsamlı bir görünümünü sağlar ve OTEL tarafından desteklenen tüm kaynaklarda dinlemeyi destekler. | Yalnızca Dapr kaynaklarıyla sınırlıdır. |
.NET Aspire, Dapr sepetleri yapılandırmak için basit bir API sağlayarak ve sepetleri panoda kaynak olarak göstererek Dapr uygulamaları ayarlamayı ve hata ayıklamayı kolaylaştırır.
Dapr ile .NET Aspire bileşenlerini keşfet
- Dapr—Durum depoları: AddDaprStateStore.NET projenize yapılandırılmış bir durum deposu eklemek için .NET Aspire çağırabilirsiniz.
- Dapr—Pub Sub: AddDaprPubSub.NET projenize yapılandırılmış bir pub alt dosyası eklemek için .NET Aspire çağırabilirsiniz.
- Dapr—Bileşenler: AddDaprComponent.NET projenize yapılandırılmış tümleştirme eklemek için .NET Aspire'ı çağırabilirsiniz.
Dapr yükleme
Bu tümleştirme için Dapr sürüm 1.13 veya üzeri gerekir.
Dapryüklemek için 'e bakın, Dapr CLIyükleyin.
Önemli
Dapr CLI olmadan .NET Aspire çözümünü çalıştırmayı denerseniz aşağıdaki hatayı alırsınız:
Unable to locate the Dapr CLI.
Barındırma entegrasyonu
.NET Aspire çözümünüzde, Dapr'i tümleştirmek ve türlerine ve API'lerine erişmek için 📦Aspire.Hosting.Dapr NuGet paketini uygulama konağı projesine ekleyin.
dotnet add package Aspire.Hosting.Dapr
Daha fazla bilgi için bkz. dotnet add package veya .NET uygulamalarında paket bağımlılıklarını yönetme.
.NET Aspire kaynaklarına Dapr yan araba ekleme
.NET
.NET Aspire bir kaynağa sepet eklemek için üzerindeki WithDaprSidecar yöntemini çağırın.
appId
parametresi, Dapr uygulamasının benzersiz tanımlayıcısıdır, ancak isteğe bağlıdır. Eğer bir appId
sağlamazsanız, bunun yerine üst kaynak adı kullanılır.
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
Dapr sepetleri yapılandırma
WithDaprSidecar
yöntemi, Dapr yan arabası seçenekleriniz ve AppId
gibi çeşitli bağlantı noktalarını yapılandırmak için aşırı yükleme işlevleri sunar. Aşağıdaki örnekte, Dapr sidecar GRPC, HTTP, metrikler ve belirli bir uygulama kimliği için belirli bağlantı noktalarıyla yapılandırılır.
DaprSidecarOptions sidecarOptions = new()
{
AppId = "FirstSidecar",
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
Tam Dapr uygulama konağı örneği
Tüm parçaları birleştirerek, aşağıdaki .NET.NET Aspire uygulama ana bilgisayar projesi örneğini göz önünde bulundurun:
- Varsayılanlarla Dapr sidecar bildiren bir arka uç API hizmeti.
- Açık portlar gibi belirli seçeneklere sahip bir Dapr yan hizmeti bildiren bir web ön yüz projesi.
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();
.NET Aspire çözümünü başlattığınızda, gösterge paneli, durumu ve günlükleriyle birlikte kaynak olarak Dapr yan vagonu gösterir.
.NET Aspire sidecar kaynaklarını gösteren
.NET Aspire projeleri kullanırken Dapr yan arabaları kullanma
.NET Aspire kaynaklardan Dapr API'leri kullanmak için 📦Dapr.AspNetCore/ NuGet paketini kullanabilirsiniz. Dapr SDK, Dapr sidecar'larla etkileşim kurmak için bir dizi API sağlar.
Not
Dapr.AspNetCore
ile Dapr tümleştirmesi (DI tümleştirmesi, aboneliklerin kaydı vb.) için ASP.NET kitaplığını kullanın.
ASP.NET olmayan uygulamalar (konsol uygulamaları gibi) yalnızca 📦 kullanılır.
dotnet add package Dapr.AspNetCore
Dapr müşteri ekleme
bir ASP.NET Core projesine yüklendikten sonra SDK, hizmet oluşturucusuna eklenebilir.
builder.Services.AddDaprClient();
Dapr yöntemlerini çağırma
DaprClient
örneği artık Dapr SDK aracılığıyla Dapr sepetle etkileşime geçmek için hizmetlerinize eklenebilir:
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
, HTTP isteğini Dapr sidecar'a gönderen yöntemdir. Aldığı parametreler genel bir yöntemdir:
- HTTP eylemi.
- Çağrılacak hizmetin Dapr uygulama kimliği.
- Yöntem adı.
- İptal belirteci.
HTTP yöntemine bağlı olarak, bir istek gövdesi ve başlık bilgilerini de alabilir. Genel tür parametresi, yanıt gövdesinin türüdür.
Ön uç projesi için tam Program.cs dosyası şunları gösterir:
- Dapr istemcisi, hizmet oluşturucusuna ekleniyor.
- Arka uç hizmetini çağırmak için Dapr istemcisini kullanan
WeatherApiClient
sınıfı.
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();
Örneğin, bir Blazor projesinde WeatherApiClient
sınıfını razor sayfasına ekleyebilir ve arka uç hizmetini çağırmak için kullanabilirsiniz:
@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();
}
}
Dapr SDK kullanıldığında, Dapr sepet HTTP üzerinden çağrılır. Dapr sidecar daha sonra isteği hedef hizmete iletir. Hedef hizmet, yan arabirimden ayrı bir işlemde çalışırken, hizmetle ilgili tümleştirme Dapr yan arabiriminde çalışır ve hizmet keşfi ile isteği hedef hizmete yönlendirmekten sorumludur.
Sonraki adımlar
.NET Aspire