

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

# C\# Implementasi
<a name="schema-registry-gs-serde-csharp"></a>

**catatan**  
Prasyarat: Sebelum menyelesaikan langkah-langkah berikut, Anda harus memiliki sebuah klaster Amazon Managed Streaming for Apache Kafka (Amazon MSK) atau Apache Kafka yang berjalan. Produsen dan konsumen Anda harus berjalan di .NET 8.0 atau lebih tinggi.

## Penginstalan
<a name="schema-registry-gs-serde-csharp-install"></a>

Untuk aplikasi C \#, instal SerDe NuGet paket AWS Glue Schema Registry menggunakan salah satu metode berikut:

**.NET CLI:**  
Gunakan perintah berikut untuk menginstal paket:

```
dotnet add package Aws.Glue.SchemaRegistry --version 1.0.0-<rid>
```

di mana `<rid>` bisa`1.0.0-linux-x64`, `1.0.0-linux-musl-x64` atau `1.0.0-linux-arm64`

**PackageReference (dalam file.csproj Anda):**  
Tambahkan yang berikut ini ke file proyek Anda:

```
<PackageReference Include="Aws.Glue.SchemaRegistry" Version="1.0.0-<rid>" />
```

di mana `<rid>` bisa`1.0.0-linux-x64`, `1.0.0-linux-musl-x64` atau `1.0.0-linux-arm64`

## Pengaturan File Konfigurasi
<a name="schema-registry-gs-serde-csharp-config"></a>

Buat file properti konfigurasi (misalnya,`gsr-config.properties`) dengan pengaturan yang diperlukan:

**Konfigurasi Minimal:**  
Berikut ini menunjukkan contoh konfigurasi minimal:

```
region=us-east-1
registry.name=default-registry
dataFormat=AVRO
schemaAutoRegistrationEnabled=true
```

## Menggunakan pustaka klien C\# Glue Schema untuk Kafka SerDes
<a name="schema-registry-gs-serde-csharp-kafka"></a>

**Contoh penggunaan serializer:**  
Contoh berikut menunjukkan cara menggunakan serializer:

```
private static readonly string PROTOBUF_CONFIG_PATH = "<PATH_TO_CONFIG_FILE>";
var protobufSerializer = new GlueSchemaRegistryKafkaSerializer(PROTOBUF_CONFIG_PATH);
var serialized = protobufSerializer.Serialize(message, message.Descriptor.FullName);
// send serialized bytes to Kafka using producer.Produce(serialized)
```

**Contoh penggunaan deserializer:**  
Contoh berikut menunjukkan cara menggunakan deserializer:

```
private static readonly string PROTOBUF_CONFIG_PATH = "<PATH_TO_CONFIG_FILE>";
var dataConfig = new GlueSchemaRegistryDataFormatConfiguration(
    new Dictionary<string, dynamic>
    {
        {
            GlueSchemaRegistryConstants.ProtobufMessageDescriptor, message.Descriptor
        }
    }
);
var protobufDeserializer = new GlueSchemaRegistryKafkaDeserializer(PROTOBUF_CONFIG_PATH, dataConfig);

// read message from Kafka using serialized = consumer.Consume()
var deserializedObject = protobufDeserializer.Deserialize(message.Descriptor.FullName, serialized);
```

## Menggunakan pustaka klien C\# Glue Schema dengan for KafkaFlow SerDes
<a name="schema-registry-gs-serde-csharp-kafkaflow"></a>

**Contoh penggunaan serializer:**  
Contoh berikut menunjukkan cara mengkonfigurasi KafkaFlow dengan serializer:

```
services.AddKafka(kafka => kafka
    .UseConsoleLog()
    .AddCluster(cluster => cluster
        .WithBrokers(new[] { "localhost:9092" })
        .AddProducer<CustomerProducer>(producer => producer
            .DefaultTopic("customer-events")
            .AddMiddlewares(m => m
                .AddSerializer<GlueSchemaRegistryKafkaFlowProtobufSerializer<Customer>>(
                    () => new GlueSchemaRegistryKafkaFlowProtobufSerializer<Customer>("config/gsr-config.properties")
                )
            )
        )
    )
);
```

**Contoh penggunaan deserializer:**  
Contoh berikut menunjukkan cara mengkonfigurasi KafkaFlow dengan deserializer:

```
.AddConsumer(consumer => consumer
    .Topic("customer-events")
    .WithGroupId("customer-group")
    .WithBufferSize(100)
    .WithWorkersCount(10)
    .AddMiddlewares(middlewares => middlewares
        .AddDeserializer<GlueSchemaRegistryKafkaFlowProtobufDeserializer<Customer>>(
            () => new GlueSchemaRegistryKafkaFlowProtobufDeserializer<Customer>("config/gsr-config.properties")
        )
        .AddTypedHandlers(h => h.AddHandler<CustomerHandler>())
    )
)
```

## Properti Produsen Opsional
<a name="schema-registry-gs-serde-csharp-optional"></a>

Anda dapat memperluas file konfigurasi Anda dengan properti opsional tambahan:

```
# Auto-registration (if not passed, uses "false")
schemaAutoRegistrationEnabled=true

# Schema name (if not passed, uses topic name)
schema.name=my-schema

# Registry name (if not passed, uses "default-registry")
registry.name=my-registry

# Cache settings
cacheTimeToLiveMillis=86400000
cacheSize=200

# Compatibility mode (if not passed, uses BACKWARD)
compatibility=FULL

# Registry description
description=This registry is used for several purposes.

# Compression (if not passed, records are sent uncompressed)
compressionType=ZLIB
```

## Format Data yang Didukung
<a name="schema-registry-gs-serde-supported-formats"></a>

Implementasi Java dan C\# mendukung format data yang sama:
+ *AVRO: Format* biner Apache Avro
+ *JSON: Format Skema* JSON
+ *PROTOBUF: Format Buffer* Protokol

## Catatan
<a name="schema-registry-gs-serde-csharp-notes"></a>
+ Untuk memulai dengan perpustakaan, silakan kunjungi [https://www.nuget. org/packages/AWS.Lem. SchemaRegistry](https://www.nuget.org/packages/AWS.Glue.SchemaRegistry)
+ Kode sumber tersedia di: [https://github.com/awslabs/aws-glue-schema-registry](https://github.com/awslabs/aws-glue-schema-registry)