

 AWS SDK untuk .NET V3 telah memasuki mode pemeliharaan.

Kami menyarankan Anda bermigrasi ke [AWS SDK untuk .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Untuk detail dan informasi tambahan tentang cara bermigrasi, silakan lihat [pengumuman mode pemeliharaan](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/) kami.

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
<a name="msg-proc-fw-consume"></a>

Kerangka Pemrosesan AWS Pesan untuk.NET memungkinkan Anda untuk menggunakan pesan yang telah [diterbitkan](msg-proc-fw-publish.md) dengan menggunakan kerangka kerja atau salah satu layanan pesan. Pesan dapat dikonsumsi dengan berbagai cara, beberapa di antaranya dijelaskan di bawah ini.

## Penangan Pesan
<a name="handle-a-message"></a>

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. `message`Properti adalah jenis pesan (dalam hal ini`ChatMessage`).

Anda dapat kembali `MessageProcessStatus.Success()` untuk menunjukkan bahwa pesan telah diproses dengan sukses dan kerangka kerja akan menghapus pesan dari antrian Amazon SQS. Saat kembali`MessageProcessStatus.Failed()`, pesan akan tetap berada dalam antrian di mana ia dapat diproses lagi atau dipindahkan ke [antrian huruf mati, jika dikonfigurasi](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html).

## Menangani Pesan dalam Proses yang Berjalan Lama
<a name="long-running-process"></a>

Anda dapat menelepon `AddSQSPoller` dengan URL antrian SQS untuk memulai jangka panjang [https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.backgroundservice](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.backgroundservice)yang 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
<a name="config-msg-poller"></a>

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 dari`WaitTimeSeconds`. Nilai defaultnya adalah 20.

**Penanganan Batas Waktu Visibilitas Pesan**

Pesan SQS memiliki [periode batas waktu visibilitas](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html). 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 menelepon`AddSQSPoller`.
+ `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, framework 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
<a name="lambda-functions"></a>

Anda dapat menggunakan AWS Message Processing Framework untuk.NET dengan [integrasi SQS dengan Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html). Ini disediakan oleh `AWS.Messaging.Lambda` paket. Lihat [README-nya](https://github.com/aws/aws-dotnet-messaging/blob/main/src/AWS.Messaging.Lambda/README.md) untuk memulai.