Mengkonsumsi pesan dengan AWS Message Processing Framework untuk.NET - AWS SDK for .NET

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengkonsumsi pesan dengan AWS Message Processing Framework untuk.NET

Ini adalah dokumentasi prarilis untuk fitur dalam rilis pratinjau. Dokumentasi dapat berubah.

AWS Message Processing Framework untuk.NET memungkinkan Anda untuk mengkonsumsi pesan yang telah diterbitkan dengan menggunakan kerangka kerja atau salah satu layanan pesan. Pesan dapat dikonsumsi dengan berbagai cara, beberapa di antaranya dijelaskan di bawah ini.

Penangan Pesan

Untuk menggunakan pesan, terapkan penangan pesan menggunakan IMessageHandler antarmuka untuk setiap jenis pesan yang ingin Anda proses. Pemetaan antara jenis pesan dan penangan pesan dikonfigurasi dalam startup proyek.

await Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET services.AddAWSMessageBus(builder => { // Register an SQS Queue that the framework will poll for messages. // NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd"); // Register all IMessageHandler implementations with the message type they should process. // Here messages that match our ChatMessage .NET type will be handled by our ChatMessageHandler builder.AddMessageHandler<ChatMessageHandler, ChatMessage>(); }); }) .Build() .RunAsync();

Kode berikut menunjukkan contoh handler pesan untuk ChatMessage pesan.

public class ChatMessageHandler : IMessageHandler<ChatMessage> { public Task<MessageProcessStatus> HandleAsync(MessageEnvelope<ChatMessage> messageEnvelope, CancellationToken token = default) { // Add business and validation logic here. if (messageEnvelope == null) { return Task.FromResult(MessageProcessStatus.Failed()); } if (messageEnvelope.Message == null) { return Task.FromResult(MessageProcessStatus.Failed()); } ChatMessage message = messageEnvelope.Message; Console.WriteLine($"Message Description: {message.MessageDescription}"); // Return success so the framework will delete the message from the queue. return Task.FromResult(MessageProcessStatus.Success()); } }

Bagian luar MessageEnvelope berisi metadata yang digunakan oleh kerangka kerja. messageProperti adalah jenis pesan (dalam hal iniChatMessage).

Anda dapat kembali MessageProcessStatus.Success() untuk menunjukkan bahwa pesan telah diproses dengan sukses dan kerangka kerja akan menghapus pesan dari antrian Amazon SQS. Saat kembaliMessageProcessStatus.Failed(), pesan akan tetap berada dalam antrian di mana ia dapat diproses lagi atau dipindahkan ke antrian huruf mati, jika dikonfigurasi.

Menangani Pesan dalam Proses yang Berjalan Lama

Anda dapat menelepon AddSQSPoller dengan URL antrian SQS untuk memulai jangka panjang BackgroundServiceyang akan terus melakukan polling antrian dan memproses pesan.

await Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET services.AddAWSMessageBus(builder => { // Register an SQS Queue that the framework will poll for messages. // NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd", options => { // The maximum number of messages from this queue that the framework will process concurrently on this client. options.MaxNumberOfConcurrentMessages = 10; // The duration each call to SQS will wait for new messages. options.WaitTimeSeconds = 20; }); // Register all IMessageHandler implementations with the message type they should process. builder.AddMessageHandler<ChatMessageHandler, ChatMessage>(); }); }) .Build() .RunAsync();

Mengkonfigurasi SQS Message Poller

Poller pesan SQS dapat dikonfigurasi oleh SQSMessagePollerOptions saat memanggil. AddSQSPoller

  • MaxNumberOfConcurrentMessages- Jumlah maksimum pesan dari antrian untuk diproses secara bersamaan. Nilai default adalah 10.

  • WaitTimeSeconds- Durasi (dalam detik) di mana panggilan ReceiveMessage SQS menunggu pesan tiba dalam antrian sebelum kembali. Jika pesan tersedia, panggilan akan kembali lebih cepat dariWaitTimeSeconds. Nilai defaultnya adalah 20.

Penanganan Batas Waktu Visibilitas Pesan

Pesan SQS memiliki periode batas waktu visibilitas. Ketika satu konsumen mulai menangani pesan yang diberikan, itu tetap dalam antrian tetapi disembunyikan dari konsumen lain untuk menghindari pemrosesan lebih dari sekali. Jika pesan tidak ditangani dan dihapus sebelum terlihat lagi, konsumen lain mungkin mencoba menangani pesan yang sama.

Framework akan melacak dan mencoba memperpanjang batas waktu visibilitas untuk pesan yang saat ini ditangani. Anda dapat mengonfigurasi perilaku ini pada SQSMessagePollerOptions saat meneleponAddSQSPoller.

  • VisibilityTimeout- Durasi dalam detik yang menerima pesan disembunyikan dari permintaan pengambilan berikutnya. Nilai default-nya adalah 30.

  • VisibilityTimeoutExtensionThreshold- Ketika batas waktu visibilitas pesan dalam beberapa detik setelah kedaluwarsa, kerangka kerja akan memperpanjang batas waktu visibilitas (beberapa detik lagi). VisibilityTimeout Nilai bawaannya adalah 5.

  • VisibilityTimeoutExtensionHeartbeatInterval- Seberapa sering dalam hitungan detik kerangka kerja akan memeriksa pesan yang dalam hitungan VisibilityTimeoutExtensionThreshold detik setelah kedaluwarsa, dan kemudian memperpanjang batas waktu visibilitasnya. Nilai default adalah 1.

Dalam contoh berikut, kerangka kerja akan memeriksa setiap 1 detik untuk pesan yang masih ditangani. Untuk pesan-pesan tersebut dalam waktu 5 detik setelah terlihat lagi, kerangka kerja akan secara otomatis memperpanjang batas waktu visibilitas setiap pesan dengan 30 detik lagi.

// NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd", options => { options.VisibilityTimeout = 30; options.VisibilityTimeoutExtensionThreshold = 5; VisibilityTimeoutExtensionHeartbeatInterval = 1; });

Menangani pesan dalam AWS Lambda fungsi

Anda dapat menggunakan AWS Message Processing Framework untuk.NET dengan integrasi SQS dengan Lambda. Ini disediakan oleh AWS.Messaging.Lambda paket. Lihat README-nya untuk memulai.