开始使用适用于.NET 的 Amazon 消息处理框架 - 适用于 .NET 的 Amazon SDK (V4)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

的版本 4 (V4) 适用于 .NET 的 Amazon SDK 已经发布!

有关重大更改和迁移应用程序的信息,请参阅迁移主题

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

开始使用适用于.NET 的 Amazon 消息处理框架

在开始之前,请确保您已经设置了环境配置了项目。还要查看使用 SDK中的信息。

本主题提供的信息将帮助您开始使用消息处理框架。除了先决条件和配置信息外,还提供了一个教程,向您展示如何实现常见场景。

先决条件和配置

  • 您为应用程序提供的凭证必须对应用程序所使用的消息服务和操作具有相应的权限。有关更多信息,请参阅 SQS、SN S 的安全主题及其各自EventBridge的开发者指南。另请参阅 README 文件中讨论特定权限 GitHub 的部分。

  • 要使用适用于.NET 的 Amazon 消息处理框架,必须将该AWS.Messaging NuGet包添加到您的项目中。例如:

    dotnet add package AWS.Messaging
  • 该框架与.NET 的依赖注入 (DI) 服务容器集成。您可以在应用程序启动期间通过调用将其添加AddAWSMessageBus到 DI 容器来配置框架。

    var builder = WebApplication.CreateBuilder(args); // Register the AWS Message Processing Framework for .NET builder.Services.AddAWSMessageBus(builder => { // Register that you'll publish messages of type ChatMessage to an existing queue builder.AddSQSPublisher<ChatMessage>("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd"); });

教程

本教程演示如何使用适用于.NET 的 Amazon 消息处理框架。它创建了两个应用程序:一个 ASP.NET Core Minimal API,用于在 API 终端节点收到请求时向 Amazon SQS 队列发送消息,以及一个长时间运行的控制台应用程序,用于轮询和处理这些消息。

注意

运行本教程后,您可能会产生 SQS 消息传送费用。

步骤

创建 SQS 队列

本教程需要一个 SQS 队列来向其发送消息和从中接收消息。可以使用 Amazon CLI 或的以下命令之一来创建队列 Amazon Tools for PowerShell。记下返回的队列 URL,以便可以在随后的框架配置中指定它。

Amazon CLI
aws sqs create-queue --queue-name DemoQueue
Amazon Tools for PowerShell
New-SQSQueue -QueueName DemoQueue

创建并运行发布应用程序

使用以下步骤创建和运行发布应用程序。

  1. 打开命令提示符或终端。查找或创建可以在其中创建 .NET 项目的操作系统文件夹。

  2. 在该文件夹中,运行以下命令以创建 .NET 项目。

    dotnet new webapi --name Publisher
  3. 导航到新项目的文件夹。添加对.NET Amazon 消息处理框架的依赖关系。

    cd Publisher dotnet add package AWS.Messaging
    注意

    如果您使用身份 Amazon IAM Identity Center 验证,请务必同时添加AWSSDK.SSOAWSSDK.SSOOIDC

  4. 将中的Program.cs代码替换为以下代码。

    using AWS.Messaging; using Microsoft.AspNetCore.Mvc; using Publisher; var builder = WebApplication.CreateBuilder(args); // Add services to the container. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle. builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Configure the AWS Message Processing Framework for .NET. builder.Services.AddAWSMessageBus(builder => { // Check for input SQS URL. // The SQS URL should be passed as a command line argument or set in the Debug launch profile. if ((args.Length == 1) && (args[0].Contains("https://sqs."))) { // Register that you'll publish messages of type GreetingMessage: // 1. To a specified queue. // 2. Using the message identifier "greetingMessage", which will be used // by handlers to route the message to the appropriate handler. builder.AddSQSPublisher<GreetingMessage>(args[0], "greetingMessage"); } // You can map additional message types to queues or topics here as well. }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // Create an API Endpoint that receives GreetingMessage objects // from the caller and then sends them as an SQS message. app.MapPost("/greeting", async ([FromServices] IMessagePublisher publisher, Publisher.GreetingMessage message) => { return await PostGreeting(message, publisher); }) .WithName("SendGreeting") .WithOpenApi(); app.Run(); public partial class Program { /// <summary> /// Endpoint for posting a greeting message. /// </summary> /// <param name="greetingMessage">The greeting message.</param> /// <param name="messagePublisher">The message publisher.</param> /// <returns>Async task result.</returns> public static async Task<IResult> PostGreeting(GreetingMessage greetingMessage, IMessagePublisher messagePublisher) { if (greetingMessage.SenderName == null || greetingMessage.Greeting == null) { return Results.BadRequest(); } // Publish the message to the queue configured above. await messagePublisher.PublishAsync(greetingMessage); return Results.Ok(); } } namespace Publisher { /// <summary> /// This class represents the message contents. /// </summary> public class GreetingMessage { public string? SenderName { get; set; } public string? Greeting { get; set; } } }
  5. 运行以下命令。这应该会打开一个带有 Swagger UI 的浏览器窗口,允许你浏览和测试你的 API。

    dotnet watch run <queue URL created earlier>
  6. 打开/greeting端点并选择试用

  7. 为消息指定senderNamegreeting值,然后选择执行。这会调用你的 API,它会发送 SQS 消息。

创建并运行处理应用程序

使用以下过程创建和运行处理应用程序。

  1. 打开命令提示符或终端。查找或创建可以在其中创建 .NET 项目的操作系统文件夹。

  2. 在该文件夹中,运行以下命令以创建 .NET 项目。

    dotnet new console --name Handler
  3. 导航到新项目的文件夹。添加对.NET Amazon 消息处理框架的依赖关系。还要添加Microsoft.Extensions.Hosting软件包,它允许您通过 .NET 通用主机配置框架。

    cd Handler dotnet add package AWS.Messaging dotnet add package Microsoft.Extensions.Hosting
    注意

    如果您使用身份 Amazon IAM Identity Center 验证,请务必同时添加AWSSDK.SSOAWSSDK.SSOOIDC

  4. 将中的Program.cs代码替换为以下代码。

    using AWS.Messaging; using Handler; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; var builder = Host.CreateDefaultBuilder(args); builder.ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET. services.AddAWSMessageBus(builder => { // Check for input SQS URL. // The SQS URL should be passed as a command line argument or set in the Debug launch profile. if ((args.Length == 1) && (args[0].Contains("https://sqs."))) { // Register you'll poll the following queue. builder.AddSQSPoller(args[0]); // And that messages of type "greetingMessage" should be: // 1. Deserialized as GreetingMessage objects. // 2. Which are then passed to GreetingMessageHandler. builder.AddMessageHandler<GreetingMessageHandler, GreetingMessage>("greetingMessage"); } // You can add additional message handlers here, using different message types. }); }); var host = builder.Build(); await host.RunAsync(); namespace Handler { /// <summary> /// This class represents the message contents. /// </summary> public class GreetingMessage { public string? SenderName { get; set; } public string? Greeting { get; set; } } /// <summary> /// This handler is invoked each time you receive the message. /// </summary> public class GreetingMessageHandler : IMessageHandler<GreetingMessage> { public Task<MessageProcessStatus> HandleAsync( MessageEnvelope<GreetingMessage> messageEnvelope, CancellationToken token = default) { Console.WriteLine( $"Received message {messageEnvelope.Message.Greeting} from {messageEnvelope.Message.SenderName}"); return Task.FromResult(MessageProcessStatus.Success()); } } }
  5. 运行以下命令。这将启动一个长期运行的民意调查员。

    dotnet run <queue URL created earlier>

    启动后不久,应用程序将收到本教程第一部分中发送的消息并记录以下消息:

    Received message {greeting} from {senderName}
  6. 按下Ctrl+C可停止轮询器。

清理

使用 Amazon CLI 或的以下命令之一 Amazon Tools for PowerShell 删除队列。

Amazon CLI
aws sqs delete-queue --queue-url "<queue URL created earlier>"
Amazon Tools for PowerShell
Remove-SQSQueue -QueueUrl "<queue URL created earlier>"