開始使用適用於 AWS 的訊息處理架構。NET - AWS SDK for .NET

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

開始使用適用於 AWS 的訊息處理架構。NET

這是預覽版本中功能的預先發行文件。內容可能變動。

開始之前,請確定您已設定環境和專案 。也請檢閱 中的資訊SDK 功能

本主題提供的資訊可協助您開始使用訊息處理架構。除了先決條件和組態資訊之外,還提供教學課程,說明如何實作常見案例。

先決條件和組態

  • 您為應用程式提供的憑證必須具有其使用的訊息服務和操作的適當許可。如需詳細資訊,請參閱其各自開發人員指南EventBridge中的 SQSSNS和 安全主題。

  • 若要使用適用於 AWS 的訊息處理架構NET,您必須將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"); });

教學課程

本教學課程示範如何使用適用於 AWS 的訊息處理架構NET。它建立兩個應用程式:ASP。NET 在API端點收到請求時,將訊息API傳送到 Amazon SQS佇列的核心最小值,以及輪詢這些訊息並處理它們的長期主控台應用程式。

  • 本教學課程中的指示會偏好 .NET CLI,但您可以使用 .NET CLI或 Microsoft Visual Studio 等跨平台工具來執行本教學課程。如需工具的相關資訊,請參閱 安裝和設定您的工具鏈

  • 本教學課程假設您正在使用[default]設定檔作為憑證。它還假設短期憑證可用,並具有傳送和接收 Amazon SQS 訊息的適當許可。如需詳細資訊,請參閱 配置 SDK 身份驗證 AWS和 的安全主題SQS

注意

透過執行本教學課程,您可能會產生SQS傳訊費用。

步驟

建立 SQS 佇列

本教學課程需要SQS佇列來傳送訊息給 ,並從中接收訊息。佇列可以使用下列其中一個命令來建立 AWS CLI 或 AWS Tools for PowerShell。請記下傳回URL的佇列,以便您可以在接下來的架構組態中指定佇列。

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

建立和執行發佈應用程式

使用下列程序來建立和執行發佈應用程式。

  1. 開啟命令提示字元或終端機。尋找或建立作業系統資料夾,您可以在其中建立 .NET 專案。

  2. 在該資料夾中,執行下列命令來建立 .NET 專案。

    dotnet new webapi --name Publisher
  3. 導覽至新專案的資料夾。在適用於 AWS 的訊息處理架構上新增相依性NET。

    cd Publisher dotnet add package AWS.Messaging
    注意

    如果您使用 AWS 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. 導覽至新專案的資料夾。在適用於 AWS 的訊息處理架構上新增相依性NET。也新增Microsoft.Extensions.Hosting套件,可讓您透過 設定架構。NET 一般主機

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

    如果您使用 AWS 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 停止輪詢器。

清除

使用下列其中一個命令,讓 AWS CLI 或 AWS Tools for PowerShell 刪除佇列。

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