原文 | Damian Edwards

翻译 | 郑子铭

自上个月宣布并推出 .NET Aspire 以来,我们收到的反馈非常惊人!通过问题和拉取请求对回购协议的参与一直激励着团队。我们正在深入了解开发人员在分布式云应用程序开发中如何使用(以及希望使用).NET Aspire 或其他组件。社区已经做出了一些很棒的贡献,许多贡献也在进行中。我代表团队感谢您的兴奋和反馈!

.NET Aspire 预览版 2 现已推出!以下是此预览版中新增内容的摘要:

  • 仪表板

    • 所有资源类型现在都合并到一个“资源”视图中
    • 新的详细信息窗格设计
    • 所有资源类型的控制台日志现在合并到一个“控制台日志”视图中
    • 添加到结构化日志视图的日志类别名称
    • 对其他资源和开发服务的传出请求显示为资源/服务名称而不是 URL
  • 托管和编排
    • 容器现在支持配置在启动时传递给它们的参数
    • 容器和可执行文件现在可以通过端点引用其他资源以进行服务发现配置
    • 添加没有 的项目
    • 资源现在可以引用现有的 URI 端点来进行服务发现配置
    • 支持添加 Node.js 应用程序作为资源
    • 现在,无论有或没有副本托管,项目都使用启动配置文件中的端口
  • 组件
    • 组件包现在有单独的图标
    • 新:添加了 MySqlConnector 组件
    • 新:添加了 MongoDB 组件
    • Azure SDK 组件现在默认启用分布式跟踪(服务总线除外)
  • 部署
    • Azure 开发人员 CLI 改进
    • Aspir8:社区开发的工具,用于将 .NET Aspire 应用程序部署到 Kubernetes
  • Dapr
    • 不再需要指定 Dapr sidecar 的 ID
    • 对描述应用程序模型中所有 Dapr 组件的一流支持
    • Azure 开发人员 CLI (AZD) 支持将使用 Dapr 的 .NET Aspire 应用部署到 Azure 容器应用 (ACA)

获取 .NET Aspire 预览版 2

要安装或升级到 .NET Aspire Preview 2,请执行以下步骤:

  1. 如果在 Windows 上并使用 Visual Studio 与 .NET Aspire 配合使用,请安装/更新到最新的 Visual Studio 2022 预览版(撰写本文时为 17.9.0 预览版 2.0)

    • 确保在 Visual Studio 安装程序的“单独组件”选项卡下选择“.NET Aspire SDK(预览版)”组件:注意,您必须按照这些说明中的其余步骤更新到预览版 2

  1. 如果在 Windows 上安装了 Visual Studio 2022 17.8.x,但打算仅通过 .NET CLI (dotnet) 使用 .NET Aspire,请使用独立安装程序下载并安装 .NET 8.0.100 SDK
  2. 如果在 macOS 或 Linux 上,请下载并安装 .NET 8.0.100 SDK
  3. 从终端运行以下命令来更新 .NET Aspire 工作负载:
dotnet workload update
dotnet workload install aspire

请注意,如果您已经安装了 .NET Aspire 工作负载的 Preview 1 版本,您可能会看到消息,通知您工作负载已安装。这些可以安全地忽略。

  1. 有关安装 .NET Aspire 的详细说明,请参阅文档

更新后,您可以运行 dotnet Workload List 查看更新后的版本(注意:您的 Visual Sudio 版本可能有所不同):

Installed Workload Id      Manifest Version                     Installation Source
---------------------------------------------------------------------------------------------- aspire 8.0.0-preview.2.23619.3/8.0.100 SDK 8.0.100, VS 17.9.34310.174

更新现有应用程序

对于现有 .NET Aspire 应用程序,执行上述步骤以获取最新工作负载后,您将需要更改任何 Aspire 组件的包引用。将所有 Aspire 包引用(托管和组件)更新为 8.0.0-preview.2.23619.3,例如托管将更改为:

<PackageReference Include="Aspire.Hosting" Version="8.0.0-preview.2.23619.3" />

引用的所有其他包也应该更新到 Preview 2 版本。如果使用 Visual Studio,您还可以使用 NuGet 包管理器并更新通过 IDE 使用的所有包(请务必选中 UI 中的预发布复选框)。

API变更

此外,我们在预览版 2 中进行了一些托管 API 更改。在现有代码中,API 调用(例如 builder.AddPostgresContainer(...))现在应更改为 builder.AddPostgres(...) 以保留相同的行为(有类似的更改)也适用于其他资源类型)。我们希望在“抽象”资源类型的概念(例如 Redis 服务器(例如 AddRedis(...)))和运行 Redis 的容器(例如 AddRedisContainer(...))之间添加区别。 RedisContainer 等类型的构建器支持 WithEnvironment(...) 和 WithVolumeMount(...) 等扩展方法,而 RedisServer 等类型的构建器则不支持,因为预期 .NET Aspire 应用程序的部署工具可能会使用目标云环境中的托管资源类型,不支持以这种方式进行自定义。

此外,我们还删除了 builder.AddXYZConnection(...) 方法,其中 XYZ 是资源类型的名称。这些扩展是添加环境变量(例如 ConnectionString_myresource)的非常薄的包装。

仪表板更新

我们在 .NET Aspire 的初始预览版中得到了对仪表板的热烈响应!人们非常热衷于能够轻松地了解 .NET Aspire 如何帮助默认情况下使应用程序可观察,以及构成分布式系统的所有单独资源的状态。根据您的反馈,我们对预览 2 中的仪表板进行了以下更改。

资源和控制台日志的新组合视图

在预览版 1 中,仪表板上有单独的页面,用于查看配置为 .NET Aspire 应用程序一部分的项目、可执行文件和容器的详细信息。在预览版 2 中,这些已合并为一个“资源”页面,使您可以更轻松地在一个位置查看所有资源的状态和关键详细信息。 “名称”列现在包括项目和可执行文件的进程 ID 以及容器的容器 ID。 “源”列详细说明了项目和可执行文件的路径,对于容器,显示了图像名称和标签,以及容器端口(如果公开)。

控制台日志得到相同的处理,从而可以更轻松地从单个页面选择任何资源来查看控制台日志:

可停靠的详细信息窗格

现在使用新的详细信息窗格来显示相关项目的更多信息,例如资源的环境变量,或者结构化日志或跟踪范围的详细信息。该窗格可以停靠在当前视图的底部或侧面,从而可以更轻松地在当前视图中显示的不同项目的详细信息之间进行切换。

添加到结构化日志视图的日志类别名称

日志消息的类别名称现在显示在结构化日志视图的详细信息窗格中,从而可以轻松查看消息的来源:

发往已知目的地的传出请求将显示名称而不是 URL

现在,对已知目的地(例如由 Visual Studio 托管的其他资源和端点以支持开发体验(例如浏览器链接))的传出请求现在会在“跟踪”视图中自动解析和适当命名:

托管和编排更新配置容器启动参数

现在,您可以使用 IResourceBuilder.WithArgs 方法配置要传递到 AppHost 项目中配置的容器的参数。这些参数将在启动时传递给容器。以下是使用此功能的示例,取自新添加的数据库容器示例。

var builder = DistributedApplication.CreateBuilder(args);

var addressBookDb = builder.AddSqlServerContainer("sqlserver")
// Mount the init scripts directory into the container.
.WithVolumeMount("./sqlserverconfig", "/usr/config", VolumeMountType.Bind)
// Mount the SQL scripts directory into the container so that the init scripts run.
.WithVolumeMount("../DatabaseContainers.ApiService/data/sqlserver", "/docker-entrypoint-initdb.d", VolumeMountType.Bind)
// Run the custom entrypoint script on startup.
.WithArgs("/usr/config/entrypoint.sh")
.AddDatabase("AddressBook");

所有资源类型之间的服务发现

现在可以使用 WithServiceBinding 方法配置容器和可执行文件以公开服务端点,然后使用 WithReference 将它们作为对其他资源的引用传递,并将其服务端点作为服务发现的配置注入。

var builder = DistributedApplication.CreateBuilder(args);

// Add customer API container built by partner team
var customerApi = builder.AddContainer("customerapi", image: "contoso.com/eshop/customers")
.WithServiceBinding(containerPort: 8080, scheme: "http"); // Configure our storefront web project to reference the customer service API so that it can
// reference the service by name instead of by IP address, e.g. http://customerapi
var storeFront = builder.AddProject<Projects.Contoso_eShop_Storefront>("storefront")
.WithReference(customerApi);

根据项目文件路径添加项目

在某些情况下,将 AppHost 项目中的项目引用添加到服务项目作为项目引用可能是不合需要的。现在,只需将项目文件路径传递给 AddProject 方法,就可以将项目添加为资源,而无需项目引用。这可以使在更复杂的源布局情况下(例如,从当前解决方案外部集成项目变得更容易)。当使用 git 子模块引入合作伙伴团队存储库的内容时。

var builder = DistributedApplication.CreateBuilder(args);

var pathBasedProject = builder.AddProject(
name: "customerapi",
// The project will be resolved relative to the AppHost project directory
projectPath: "../../submodules/customerapi/src/CustomerApi/CustomerApi.csproj");

引用现有的 URI 端点以进行服务发现配置

从当前解决方案外部引用服务甚至由不同团队管理的另一种模式可以是使用专门为开发目的托管的服务的现有实例。您现在可以直接引用基于 HTTP 的服务,并使用服务发现所需的值配置使用资源:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache");

builder.AddProject<Projects.AspireApp30_Web>("webfrontend")
.WithReference(cache)
// The app can reference this service simply via http://apiservice
.WithReference("apiservice", new Uri("http://apiservice.v2.dev.contoso.com"));

支持添加 Node.js 应用程序作为资源

现在支持将基于 Node.js 的应用程序配置到 .NET Aspire AppHost 项目中。 AddNodeApp 和 AddNpmApp 方法可用于轻松地将 Node.js 应用程序包含在 Aspire AppHost 项目中,例如基于 React 的前端。包含的 Node.js 应用程序可以参与服务发现和连接字符串配置,并将注入仪表板 OTLP 端点 URL 以启用 OpenTelemetry。要将应用程序配置为部署为容器,请对返回的资源调用 AsDockerFileInManifest 方法。

Aspire with Node.js 示例已更新为使用此内置支持,并演示了如何配置 Node.js 应用程序以将 OpenTelemetry 跟踪导出到 Aspire 仪表板。

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedisContainer("cache");

var apiservice = builder.AddProject<Projects.ApiService>("apiservice");

builder.AddNodeApp("webapp", "../webapp/app.js")
.WithReference(apiservice)
.WithReference(cache)
// Dynamically assign an http port for the the Node.js app.
// The port will be set in the 'PORT' environment variable.
.WithServiceBinding(scheme: "http", env: "PORT")
.AsDockerfileInManifest();

项目现在一致使用其启动配置文件中指定的端口

启动 AppHost 项目时,Aspire.Hosting 会在所有配置的服务之前启动反向代理,以便可以执行对配置的副本进行负载平衡等任务。项目应用程序本身的实例将被分配随机端口来侦听,代理会将客户端请求转发到该端口。现在,在开发过程中本地运行时,代理将使用项目启动配置文件中指定的端口(即 Properties/launchSettings.json 文件中的“applicationUrl”属性)作为传入端口。这意味着您用于访问项目的本地主机 URL 现在应该在开发过程中保持一致,因为它由项目的启动配置文件控制,无论是直接启动项目,还是通过 AppHost 项目启动它,无论是否有副本。

原文链接

Announcing .NET Aspire Preview 2

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com)

【译】发布 .NET Aspire 预览版 2(一)的更多相关文章

  1. 实时人工智能:微软发布Project Brainwave预览版 现场可编程门阵列(Field Programmable Gate Array,简称FPGA) 硬件设计可以迅速演进

    https://mp.weixin.qq.com/s/bAPiPURZd-YsbV5PbzwpQQ 编者按:随着各大公司对于数据计算的要求越来越高,实时AI成为了研究者们关注的重点.在美国西雅图举行的 ...

  2. SuperSocket 2.0 发布第一个预览版, 另寻找Yang Fan哥哥

    昨天,SuperSocket的作者发布了2.0版本的第一个预览版.SuperSocket 2.0 是一个经过全新设计的,第一个完全基于.NET Core的版本.作者正在积极尝试提供更简单易用的API的 ...

  3. .NET 6 预览版 7 发布——最后一个预览版

    原文:bit.ly/2VJxjxQ 作者:Richard 翻译:精致码农-王亮 说明:文中有大量的超链接,这些链接在公众号文章中被自动剔除,一部分包含超链接列表的小段落被我删减了,如果你对此感兴趣,请 ...

  4. 【译】.NET 7 预览版 1 中的 ASP.NET Core 更新

    原文 | Daniel Roth 翻译 | 郑子铭 .NET 7 预览版 1 现已推出!这是 .NET 下一个主要版本的第一个预览版,其中将包括使用 ASP.NET Core 进行 Web 开发的下一 ...

  5. CPF C#跨平台UI框架发布安卓端预览版

    CPF的安卓端适配采用Xamarin的安卓绑定库,而不是Xamarin.Form.CPF和flutter差不多,完全由skia绘制,基本不依赖原生控件. 当前还只是预览版,不建议用在正式项目中. 可能 ...

  6. sql server 2014预览版发布

    MSDN发布sql server2014预览版,如下图: SQL Server 2014新特性: 微软SQL Server部门主管Eron Kelly介绍,通过将交易处理放到内存中进行,新的SQL S ...

  7. .NET 7 发布的最后一个预览版Preview 7, 下个月发布RC

    微软在2022年8月9日 发布了.NET 7 Preview 7[1],这是它在11月10日 RTM 之前进入发布候选阶段之前的最后预览版. 预览版 7 已在 Visual Studio 17.4 预 ...

  8. .NET 6 预览版 7:新功能已完成 ,将专注于改进

    .NET 团队的项目经理 Richard Lander在宣布 .NET 6 Preview 7 时说:"这是 .NET 预览的又一季的结束.", 中文翻译:.NET 6 预览版 7 ...

  9. 微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server

    微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容 ...

  10. 【译】Visual Studio 15 预览版更新说明

    序:恰逢Build2016大会召开,微软发布了VS2015的update2更新包和VS2016预览版.本人正在提升英文水平中,于是在这里对VS2016预览版的官方文档进行了部分翻译.因为VS有些功能使 ...

随机推荐

  1. freeswitch xml_rpc模块

    概述 freeswitch有非常多的周边模块,给我们提供各种各样的功能,有些功能在适当的场景下可以极大的方便我们的开发和应用. 今天我们介绍一个不常用的模块mod_xml_rpc. freeswitc ...

  2. Android Kotlin 导入 Protobuf

    project build.gradle plugins { id "com.google.protobuf" version "0.9.1" apply fa ...

  3. GCC 指定运行期动态链接库搜索路径

    链接器 ld 的 -rpath=dir 选项可以指定运行期 so 文件的搜索路径. GCC 的 -Wl,option 选项可以传递选项给链接器 ld. 所以组合起来,可以直接使用 -Wl,-rpath ...

  4. shell 脚本之 disk_monitor

    编写脚本实现监测指定文件夹的磁盘空间.   =========================================================== ## 脚本逻辑介绍 用户通过 --p ...

  5. [SpringMVC] - 解决Jackson中文乱码 : springmvc-servlet.xml

    <!-- 指定响应体返回类型和编码 , 解决乱码????的问题 --> <mvc:annotation-driven> <mvc:message-converters r ...

  6. [转帖]细说ASCII、GB2312/GBK/GB18030、Unicode、UTF-8/UTF-16/UTF-32编码

    参考: <编码标准-GB2312 GBK GB18030> <字符编码笔记:ASCII,Unicode 和 UTF-8> <字体编辑用中日韩汉字Unicode编码表> ...

  7. [转帖]jdbc连接mysql设置session variables 参数变量

    目录 两种方式 连接串设置[^1] 执行语句中设置 两种方式 url连接串中设置 执行语句中设置 连接串设置1 sessionVariables jdbc.url=jdbc:mysql://xxxx. ...

  8. 【转帖】Linux创建软连接出现的错误及解决方法

    问题: 创建软连接以后,使用cd 软连接路径显示没有那个文件或目录. 创建过程及切换结果,如图: 原因: 路径一定要写成绝对路径!!! 解决办法: 了解创建软连接的命令: ln -s 源文件 目标文件 ...

  9. [转帖]一个小技巧解决笔记本HDMI接口失灵

      https://baijiahao.baidu.com/s?id=1738289993804283647&wfr=spider&for=pc 现如今笔记本的接口是越来越多,哪怕是标 ...

  10. [转帖]用实力诠释细节!“Java性能调优六大工具”之JDK命令行工具

    https://www.zhihu.com/people/javajia-gou-ji-zhu-44/posts   JDK命令行工具 在JDK的开发包中,除了大家熟知的java.exe和javac. ...