기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
의 AWS 메시지 처리 프레임워크를 시작합니다.NET
이 시험판 설명서는 프리뷰 릴리즈의 기능에 관한 것입니다. 내용은 변경될 수 있습니다. |
시작하기 전에 먼저 환경 및 프로젝트를 설정해야 합니다. 또한 SDK 기능의 정보를 검토합니다.
이 주제에서는 메시지 처리 프레임워크 사용을 시작하는 데 도움이 되는 정보를 제공합니다. 사전 조건 및 구성 정보 외에도 일반적인 시나리오를 구현하는 방법을 보여주는 자습서가 제공됩니다.
사전 조건 및 구성
-
애플리케이션에 제공하는 자격 증명에는 사용하는 메시징 서비스 및 작업에 대한 적절한 권한이 있어야 합니다. 자세한 내용은 해당 개발자 안내서의 SNS, 및 SQSEventBridge에 대한 보안 주제를 참조하세요.
-
에 대한 AWS 메시지 처리 프레임워크를 사용하려면 프로젝트에
AWS.Messaging
NuGet 패키지를 추가NET해야 합니다. 예: 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 엔드포인트에서 요청을 수신할 때 Amazon SQS 대기열로 메시지를 API 전송하는 Core MinimalAPI과 이러한 메시지를 폴링하고 처리하는 장기 실행 콘솔 애플리케이션입니다.
-
이 자습서의 지침은 에 유리하지만 CLI.NET CLI 또는 Microsoft Visual Studio와 같은 교차 플랫폼 도구를 사용하여 이 자습서를 수행할 수 있습니다NET. 도구에 대한 자세한 내용은 섹션을 참조하세요도구 체인 설치 및 구성.
-
이 자습서에서는 자격 증명에
[default]
프로필을 사용하고 있다고 가정합니다. 또한 Amazon SQS 메시지를 보내고 받을 수 있는 적절한 권한과 함께 단기 보안 인증 정보를 사용할 수 있다고 가정합니다. 자세한 내용은 AWS를 사용하여 SDK 인증 구성 및 의 보안 주제를 참조하세요SQS.
참고
이 자습서를 실행하면 SQS 메시징 비용이 발생할 수 있습니다.
단계
SQS 대기열 생성
이 자습서에서는 SQS 대기열이 메시지를 로 보내고 에서 메시지를 수신해야 합니다. AWS CLI 또는 에 대해 다음 명령 중 하나를 사용하여 대기열을 생성할 수 있습니다 AWS Tools for PowerShell. 반환URL되는 대기열을 기록해 두면 다음 프레임워크 구성에서 지정할 수 있습니다.
게시 애플리케이션 생성 및 실행
다음 절차에 따라 게시 애플리케이션을 생성하고 실행합니다.
-
명령 프롬프트 또는 터미널을 엽니다. .NET 프로젝트를 생성할 수 있는 운영 체제 폴더를 찾거나 생성합니다.
-
해당 폴더에서 다음 명령을 실행하여 .NET 프로젝트를 생성합니다.
dotnet new webapi --name Publisher
-
새 프로젝트의 폴더로 이동합니다. 의 AWS 메시지 처리 프레임워크에 대한 종속성을 추가합니다NET.
cd Publisher dotnet add package AWS.Messaging
참고
인증 AWS IAM Identity Center 에 를 사용하는 경우
AWSSDK.SSO
및 도 추가해야 합니다AWSSDK.SSOOIDC
. -
의 코드를 다음 코드
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; } } }
-
다음 명령을 실행합니다. 이렇게 하면 를 탐색하고 테스트할 수 있는 스웨거 UI가 포함된 브라우저 창이 열립니다API.
dotnet watch run
<queue URL created earlier>
-
/greeting
엔드포인트를 열고 시도를 선택합니다. -
메시지의
senderName
및greeting
값을 지정하고 실행을 선택합니다. 이렇게 API하면 메시지가 전송되는 가 호출됩니다SQS.
처리 애플리케이션 생성 및 실행
다음 절차에 따라 처리 애플리케이션을 생성하고 실행합니다.
-
명령 프롬프트 또는 터미널을 엽니다. .NET 프로젝트를 생성할 수 있는 운영 체제 폴더를 찾거나 생성합니다.
-
해당 폴더에서 다음 명령을 실행하여 .NET 프로젝트를 생성합니다.
dotnet new console --name Handler
-
새 프로젝트의 폴더로 이동합니다. 의 AWS 메시지 처리 프레임워크에 대한 종속성을 추가합니다NET. 또한
Microsoft.Extensions.Hosting
패키지를 추가하여 를 통해 프레임워크를 구성할 수 있습니다.NET 일반 호스트. cd Handler dotnet add package AWS.Messaging dotnet add package Microsoft.Extensions.Hosting
참고
인증 AWS IAM Identity Center 에 를 사용하는 경우
AWSSDK.SSO
및 도 추가해야 합니다AWSSDK.SSOOIDC
. -
의 코드를 다음 코드
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()); } } }
-
다음 명령을 실행합니다. 이렇게 하면 오래 실행되는 폴러가 시작됩니다.
dotnet run
<queue URL created earlier>
시작 직후 애플리케이션은 이 자습서의 첫 부분에서 전송된 메시지를 수신하고 다음 메시지를 기록합니다.
Received message {greeting} from {senderName}
-
Ctrl+C
을 눌러 폴러를 중지합니다.
정리
AWS CLI 또는 에 대해 다음 명령 중 하나를 사용하여 대기열 AWS Tools for PowerShell 을 삭제합니다.