.NET Podcast App 首次在 .NET Conf 2021上推出,最近进行了更新以在 .NET Conf 2022 keynote 中突出显示 .NET 7 中的新功能。该 Podcast App 已准备好使用展示 .NET,ASP.NET Core,Blazor,.NET MAUI,Azure Container Apps,Orleans,Power Platform,Playwright 等示例应用程序。在本文中,我将解释所有新功能并展示我们如何升级 .NET Podcast App 以利用它们。
架构
如前所述,.NET Podcast App 使用云原生架构来支持移动、桌面和 Web 应用程序。微服务用于添加和更新 podcasts 提要的工作服务以及为应用程序提供数据的 API。这些都由 Azure Container Apps 提供支持,以根据每个服务的不同特征动态扩展微服务。
.NET Podcast App 还有很多其他功能,包括为我们的数据库集成到 Azure SQL Server,用于保存图像和排队提交的 Azure Storage,以及用于利用 Power Apps 和 Power Automate 中的 API 的 Azure API Management。
API 更新
.NET Podcast API 已更新为使用 ASP.NET Core 中的最新功能,包括输出缓存、速率限制、API 版本控制和用于最小 API 的新路由组。此外,它将最新的增强功能与身份验证和授权集成在一起,为开发人员大大简化了这些功能。
// Authentication and authorization-related services
builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration);
builder.Services.AddAuthorizationBuilder().AddPolicy("modify_feeds", policy => policy.RequireScope("API.Access"));
// OpenAPI and versioning-related services
builder.Services.AddSwaggerGen();
builder.Services.Configure<SwaggerGeneratorOptions>(opts =>
{
opts.InferSecuritySchemes = true;
});
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddApiVersioning(options =>
{
options.DefaultApiVersion = new ApiVersion(2, 0);
options.ReportApiVersions = true;
options.AssumeDefaultVersionWhenUnspecified = true;
options.ApiVersionReader = new HeaderApiVersionReader("api-version");
});
// Enable Output Cache
builder.Services.AddOutputCache();
// Rate-limiting and output caching-related services
builder.Services.AddRateLimiter(options => options.AddFixedWindowLimiter("feeds", options =>
{
options.PermitLimit = 5;
options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
options.QueueLimit = 0;
options.Window = TimeSpan.FromSeconds(2);
options.AutoReplenishment = false;
}));
// Create version set
var versionSet = app.NewApiVersionSet()
.HasApiVersion(1.0)
.HasApiVersion(2.0)
.ReportApiVersions()
.Build();
// create new mapping for apis
var shows = app.MapGroup("/shows");
shows
.MapShowsApi()
.WithApiVersionSet(versionSet)
.MapToApiVersion(1.0)
.MapToApiVersion(2.0);
可观察性和监控
构建和部署服务器后,你需要观察和监控它们。在我们的主题演讲中,我们展示了如何通过几行代码集成 Open Telemetry、Azure Monitor 等,以此完全检测你的服务器。
builder.Services.AddOpenTelemetryTracing(tracing =>
tracing.SetResourceBuilder(serviceResource)
.AddAzureMonitorTraceExporter(o =>
{
o.ConnectionString = azureMonitorConnectionString;
})
.AddJaegerExporter()
.AddHttpClientInstrumentation()
.AddAspNetCoreInstrumentation()
.AddEntityFrameworkCoreInstrumentation()
);
builder.Services.AddOpenTelemetryMetrics(metrics =>
{
metrics
.SetResourceBuilder(serviceResource)
.AddPrometheusExporter()
.AddAzureMonitorMetricExporter(o =>
{
o.ConnectionString = azureMonitorConnectionString;
})
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddRuntimeInstrumentation()
.AddProcessInstrumentation()
.AddHttpClientInstrumentation()
.AddEventCountersInstrumentation(ec =>
{
ec.AddEventSources("Microsoft.AspNetCore.Hosting");
});
});
builder.Logging.AddOpenTelemetry(logging =>
{
logging
.SetResourceBuilder(serviceResource)
.AddAzureMonitorLogExporter(o =>
{
o.ConnectionString = azureMonitorConnectionString;
})
.AttachLogsToActivityEvent();
});
.NET SDK 容器
.NET Podcast 应用程序由微服务和容器提供支持。.NET SDK 现在只需更改几处配置即可将你的应用程序容器化。此功能现已集成到为 .NET Podcast 应用程序和 CI/CD pipeline 提供支持的服务中。
<PropertyGroup>
<ContainerImageName>podcastapi</ContainerImageName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Build.Containers" Version="0.2.7" />
</ItemGroup>
dotnet publish -c Release -r linux-x64 -p PublishProfile=DefaultContainer src/Services/Podcasts/Podcast.API/Podcast.API.csproj
Playwright 测试
Playwright 是由微软创建和维护的开源测试工具,为现代 web 应用程序提供可靠的端到端测试。当团队更新后端和前端更新时,他们希望博客应用程序的主要功能不会被破坏。他们设置了几个 Playwright 测试,并将其集成到 CI 管道中,这样一旦有了拉取请求,管道就会运行。
Power Apps 集成
使用 Azure API Management(APIM) ,你可以轻松地使用 .NET APIs,让其支持更多的服务和应用程序,包括 Power Apps。在 .NET Conf 2022 中, 我们展示了:通过 APIs 浅层的 .NET APIs,Power Apps 能够对批准和拒绝新的播客提交进行分类。现在 repo 中包括可以由你自己部署的 Power Apps。
GitHub 存储库有新手指导,介绍了如何轻松地让整个应用程序在本地运行,只需一个简单的命令就能进行开发。此外,你可以通过在克隆的 repo 中设置一些 GitHub secrets 来用 GitHub Actions 实现完整的持续集成和部署管道,将整个解决方案部署到 Azure 平台上。除了运行应用程序,你还可以在新手指导中找到 .NET Conf 的所有 demo。
我们将继续为应用程序添加新功能,也会关注你所感兴趣的内容以及你正在使用此示例架构构建的内容。有任何反馈,请前往 GitHub 讨论组。
点我前往原博客,获取相关链接、文档和视频~