在ASP.NET Core 中使用 .NET Aspire 消息传递组件

前言

云原生应用程序通常需要可扩展的消息传递解决方案,以提供消息队列、主题和订阅等功能。.NET Aspire 组件简化了连接到各种消息传递提供程序(例如 Azure 服务总线)的过程。在本教程中,小编将为大家介绍如何创建一个 ASP.NET Core 应用并将提交的消息将发送到服务总线主题以供订阅者使用。

环境准备

要使用 .NET Aspire,需要在本地安装以下软件:

  • .NET 8.0
  • .NET Aspire 工作负载:
  • 使用 Visual Studio 安装程序
  • 使用dotnet workload install aspire命令
  • Docker 桌面
  • 集成开发环境 (IDE) 或代码编辑器,例如:
  • Visual Studio 2022 预览版 17.9 或更高版本(可选)
  • Visual Studio 代码(可选)

设置 Azure 服务总线账户

az group create -n <your-resource-group-name> -location eastus
az servicebus namespace create -g <your-resource-group-name> --name <your-namespace-name> --location eastus
az servicebus topic create --g <your-resource-group-name> --namespace-name <your-namespace-name> --name notifications
az servicebus topic subscription create --g <your-resource-group-name> --namespace-name <your-namespace-name> --topic-name notifications --name mobile

备注:your-resource-group-name和your-namespace-name替换为自己值即可。

Azure 身份验证

可以使用无密码身份验证或连接字符串来完成此快速入门。无密码连接使用 Azure Active Directory 和基于角色的访问控制 (RBAC) 连接到服务总线命名空间。无需担心代码、配置文件或安全存储(例如 Azure Key Vault)中存在硬编码连接字符串。

除此之外,还可以使用连接字符串连接到服务总线命名空间,但建议在实际应用程序和生产环境中使用无密码方法。有关更多信息,请阅读身份验证和授权或访问无密码概述页面。

创建项目

  1. 在 Visual Studio 顶部,导航到“文件” “新建” “项目”。
  2. 在对话框窗口中,搜索ASP.NET Core并选择ASP.NET Core Web API。选择下一步。
  3. 在“配置新项目”屏幕上:
  • 输入项目名称AspireMessaging。
  • 将其余值保留为默认值,然后选择“下一步”。

添加 Worker Service

接下来,将工作线程服务项目添加到解决方案,以检索和处理发往 Azure 服务总线的消息。

  1. 在解决方案资源管理器中,右键单击顶级AspireMessaging解决方案节点,然后选择“添加” “新项目”。
  2. 搜索并选择Worker Service模板,然后选择Next。
  3. 对于项目名称,输入AspireMessaging.Worker并选择下一步。
  4. 在附加信息屏幕上:
  • 确保选择.NET 8.0 。
  • 确保选中Enlist in .NET Aspire Orchestration并选择Create。

Visual Studio 将项目添加到您的解决方案中,并使用新的代码行更新项目的Program.cs文件:AspireMessaging.AppHost

builder.AddProject<Projects.AspireMessaging_WorkerService>("aspiremessaging.workerservice");

完整的文件结构:

将 .NET Aspire 组件添加到 API

将.NET Aspire Azure 服务总线组件添加到您的AspireMessaging应用程序:

dotnet add package Aspire.Azure.Messaging.ServiceBus --prerelease

在Razor Pages 项目的Program.csAspireMessaging文件中,添加对扩展方法的调用AddAzureServiceBus:

builder.AddAzureServiceBus("serviceBusConnection");

在项目的_appsettings.json文件中AspireMessaging,添加对应的连接信息:

{"ConnectionStrings": {"serviceBusConnection": "Endpoint=sb://{your_namespace}.servicebus.windows.net/;SharedAccessKeyName=accesskeyname;SharedAccessKey=accesskey"}
}

备注:将{your_namespace}替换为自己的服务总线空间的名称

创建 API 端点

提供一个端点来接收数据并将其发布到服务总线主题并向订阅者广播。将以下端点添加到AspireMessaging项目中以向主题发送消息:

app.MapPost("/notify", static async (ServiceBusClient client, string message) =>
{var sender = client.CreateSender("notifications");// Create a batchusing ServiceBusMessageBatch messageBatch =await sender.CreateMessageBatchAsync();if (messageBatch.TryAddMessage(new ServiceBusMessage($"Message {message}")) is false){// If it's too large for the batch.throw new Exception($"The message {message} is too large to fit in the batch.");}// Use the producer client to send the batch of // messages to the Service Bus topic.await sender.SendMessagesAsync(messageBatch);Console.WriteLine($"A message has been published to the topic.");
})

将 .NET Aspire 组件添加到 Worker Service

将.NET Aspire Azure 服务总线组件添加到AspireMessaging.Worker应用程序:

dotnet add package Aspire.Azure.Messaging.ServiceBus --prerelease

在Razor Pages 项目的Program.csAspireMessaging.Worker文件中,添加对扩展方法的调用AddAzureServiceBus:

builder.AddAzureServiceBus("serviceBusConnection");

在项目的_appsettings.json文件中AspireMessaging.Worker,添加对应的连接信息:

{"ConnectionStrings": {"serviceBusConnection": "Endpoint=sb://{your_namespace}.servicebus.windows.net/;SharedAccessKeyName=accesskeyname;SharedAccessKey=accesskey"}
}

备注:将{your_namespace}替换为自己的服务总线空间的名称

处理来自订阅者的消息

当新消息放入队列时messages,工作服务应检索、处理和删除该消息。更新Worker.cs类以匹配以下代码:

public class Worker(ILogger<Worker> logger,ServiceBusClient client) : BackgroundService
{protected override async Task ExecuteAsync(CancellationToken stoppingToken){while (!stoppingToken.IsCancellationRequested){var processor = client.CreateProcessor("notifications","mobile",new ServiceBusProcessorOptions());// add handler to process messagesprocessor.ProcessMessageAsync += MessageHandler;// add handler to process any errorsprocessor.ProcessErrorAsync += ErrorHandler;// start processing await processor.StartProcessingAsync();logger.LogInformation("Wait for a minute and then press any key to end the processing");Console.ReadKey();// stop processinglogger.LogInformation("\nStopping the receiver...");await processor.StopProcessingAsync();logger.LogInformation("Stopped receiving messages");}}async Task MessageHandler(ProcessMessageEventArgs args){string body = args.Message.Body.ToString();logger.LogInformation("Received: {Body} from subscription.", body);// complete the message. messages is deleted from the subscription.await args.CompleteMessageAsync(args.Message);}// handle any errors when receiving messagesTask ErrorHandler(ProcessErrorEventArgs args){logger.LogError(args.Exception, args.Exception.Message);return Task.CompletedTask;}
}

最后:在本地运行并测试应用程序

  1. 按 Visual Studio 顶部的运行按钮启动 Aspire 应用程序。.NET Aspire 仪表板应用程序应在浏览器中打开。
  2. 在项目页面的aspireweb行中,单击Endpoints列中的链接以打开 API 的 Swagger UI 页面。
  3. 在 .NET Aspire 仪表板上,导航到AspireWorkerService项目的日志。
  4. 返回 Swagger UI 页面,展开/notify端点并选择Try it out。
  5. 在消息输入框中输入测试消息。
  6. 选择执行以发送测试请求。
  7. 切换回AspireWorkerService日志。看到输出日志中打印的测试消息。

扩展链接:

如何使用 Blazor 框架在前端浏览器中导入/导出 Excel XLSX

如何在.NET电子表格应用程序中创建流程图

如何将实时数据显示在前端电子表格中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/213051.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STC12C5A60S2系列1T 8051单片读写掉电保存数据IIC总线器件24C02一字节并显示在液晶显示器LCD1602上应用

基于STC12C5A60S2系列1T 8051单片读写掉电保存数据IIC总线器件24C02一字节并显示在液晶显示器LCD1602上应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍IIC通信简单…

【Vue】Node.js的下载安装与配置

目录 一.下载安装 官网&#xff1a; 二.环境变量的配置 三.设置全局路径和缓存路径 四.配置淘宝镜像 五.查看配置 六.使用npm安装cnpm ​ 一.下载安装 官网&#xff1a; https://nodejs.org/en/download 下载完之后&#xff0c;安装的时候一直点next即可&#xff0c…

C#中的迭代器和分部类

目录 一、迭代器 1.示例源码 2.生成效果&#xff1a; 二、分部类 1.示例源码 2.生成效果 迭代器在集合类中经常使用&#xff0c;而分部类则提供了一种将一个类分成多个类的方法&#xff0c;这对于有大量代码的类非常实用。 一、迭代器 迭代器是可以返回相同类型的值的有…

PPT思维导图怎么做?这2个思维导图工具墙裂推荐!

在日常学习和工作中&#xff0c;我们常常会面临需要处理大量信息的情况&#xff0c;这时候&#xff0c;一种叫做思维导图的工具可能会成为你的救星。 不同于传统的线性记录方式&#xff0c;思维导图以其独特的视觉表现力和结构化的信息处理方式&#xff0c;使得人们能够更加有…

通过云服务器部署JavaWeb项目

文章目录 搭建Java运行环境部署项目更改部分项目代码打包项目把war包上传到webapps目录下验证程序 搭建Java运行环境 搭建环境的部分比较复杂&#xff0c;为了让大家的思路更加清晰特别总结为一篇博客点击查看 部署项目 更改部分项目代码 打包项目 把war包上传到webapps目录…

电感热点温度概述及估算方法总结

🏡《电子元器件学习目录》 目录 1,什么是电感的热点温度2,热点温度参数意义3,热点温度计算方法3.1,测温估算法3.2,电阻变化估算法4,总结1,什么是电感的热点温度 电感的热点指电感的发热点,一般是电感的绕阻。电感的热点温度为电感绕阻的温度。 2,热点温度参数意义 电…

OpenStack云计算平台

目录 一、OpenStack 1、简介 2、硬件需求 3、网络 二、环境搭建 1、安全 2、主机网络 3、网络时间协议(NTP) 4、OpenStack包 5、SQL数据库 6、消息队列 7、Memcached 一、OpenStack 1、简介 官网&#xff1a;https://docs.openstack.org/2023.2/ OpenStack系统由…

Flutter 小技巧之 3.16 升级最坑 M3 默认适配技巧

如果要说 Flutter 3.16 升级里是最坑的是什么&#xff1f;那我肯定要说是 Material 3 default &#xff08;M3&#xff09;。 倒不是说 M3 bug 多&#xff0c;也不是 M3 在 3.16 上使用起来多麻烦&#xff0c;因为虽然从 3.16 开始&#xff0c;MaterialApp 里的 useMaterial3 …

通过Spring整合MyBatis实现持久层操作

文章目录 为什么要整合Spring和MyBatis&#xff1f;步骤一&#xff1a;添加依赖步骤二&#xff1a;配置数据源步骤三&#xff1a;配置MyBatis步骤四&#xff1a;创建Mapper接口和XML文件步骤五&#xff1a;使用Mapper接口拓展&#xff1a;事务管理 &#x1f389;通过Spring整合…

使用Python的turtle模块绘制钢铁侠图案

1.1引言&#xff1a; 在Python中&#xff0c;turtle模块是一个非常有趣且强大的工具&#xff0c;它允许我们以一个可视化和互动的方式学习编程。在本博客中&#xff0c;我们将使用turtle模块来绘制钢铁侠的图案。通过调用各种命令&#xff0c;我们可以引导turtle绘制出指定的图…

Springmvc原理解析

1. DispatcherServlet springmvc的核心控制器&#xff0c;负责截获所有的请求&#xff0c;当截获请求后委托给HandlerMapping进行请求映射的解析工作&#xff0c;目的是找到哪一个Controller的方法可以处理该请求&#xff0c;找到后再交由给HandlerAdaptor去负责调用并返回Mod…