Microsoft.Azure.Data.SchemaRegistry.ApacheAvro 1.0.1
Prefix Reserved
dotnet add package Microsoft.Azure.Data.SchemaRegistry.ApacheAvro --version 1.0.1
NuGet\Install-Package Microsoft.Azure.Data.SchemaRegistry.ApacheAvro -Version 1.0.1
<PackageReference Include="Microsoft.Azure.Data.SchemaRegistry.ApacheAvro" Version="1.0.1" />
paket add Microsoft.Azure.Data.SchemaRegistry.ApacheAvro --version 1.0.1
#r "nuget: Microsoft.Azure.Data.SchemaRegistry.ApacheAvro, 1.0.1"
// Install Microsoft.Azure.Data.SchemaRegistry.ApacheAvro as a Cake Addin #addin nuget:?package=Microsoft.Azure.Data.SchemaRegistry.ApacheAvro&version=1.0.1 // Install Microsoft.Azure.Data.SchemaRegistry.ApacheAvro as a Cake Tool #tool nuget:?package=Microsoft.Azure.Data.SchemaRegistry.ApacheAvro&version=1.0.1
Azure Schema Registry Apache Avro .NET客户端库
Azure Schema Registry是一个由Azure Event Hubs托管的模式存储库服务,提供模式存储、版本控制和管理工作。此包提供了一种能够序列化和反序列化包含Schema Registry方案标识符和Avro序列化数据的有效负载的Avro序列化器。
入门
安装包
使用NuGet安装.NET的Azure Schema Registry Apache Avro库
dotnet add package Microsoft.Azure.Data.SchemaRegistry.ApacheAvro
先决条件
如果您需要创建名称空间,可以使用 Azure 门户或 Azure 事件中心名称空间的创建 或 Azure PowerShell。
您可以使用以下命令使用 Azure PowerShell 创建事件中心名称空间:
New-AzEventHubNamespace -ResourceGroupName myResourceGroup -NamespaceName namespace_name -Location eastus
身份验证客户端
为了与 Azure 模式注册表服务交互,您需要创建 模式注册表客户端类 的一个实例。要创建此客户端,您需要 Azure 资源凭据和事件中心名称空间的宿主机名。
获取凭据
有关获取已验证凭据并开始与 Azure 资源交互的说明,请参阅此处快速入门指南 快速入门向导。
获取事件中心名称空间宿主机名
最简单的方法是使用 Azure 门户 并导航到您的事件中心名称空间。从“概览”选项卡,您会看到 宿主机名
。从该字段复制值。
创建 SchemaRegistryClient
一旦您拥有 Azure 资源凭据和事件中心名称空间的宿主机名,就可以创建 SchemaRegistryClient。您还需要 Azure.Identity 包以创建凭据。
// Create a new SchemaRegistry client using the default credential from Azure.Identity using environment variables previously set,
// including AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID.
// For more information on Azure.Identity usage, see: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/README.md
var schemaRegistryClient = new SchemaRegistryClient(fullyQualifiedNamespace: fullyQualifiedNamespace, credential: new DefaultAzureCredential());
关键概念
序列化器
此库提供了一个序列化器,SchemaRegistryAvroSerializer,该序列化器与 EventData
事件交互。SchemaRegistryAvroSerializer 使用 SchemaRegistryClient 来丰富使用该模式序列化数据的模式 ID。
此序列化器需要 Apache Avro 库。此序列化器接受的负载类型包括 GenericRecord 和 ISpecificRecord。
示例
以下显示了通过 SchemaRegistryAvroSerializer
可用的示例。这些操作既提供同步又提供异步方法。这些示例使用使用此方案生成的 Apache Avro 类 Employee.cs。
{
"type" : "record",
"namespace" : "TestSchema",
"name" : "Employee",
"fields" : [
{ "name" : "Name" , "type" : "string" },
{ "name" : "Age", "type" : "int" }
]
}
有关使用 Apache Avro 库生成类的详细信息,请参阅 Avro C# 文档。
使用事件中心 EventData 模型序列化和反序列化数据
要使用 Avro 信息序列化 EventData 实例,可以执行以下操作
var serializer = new SchemaRegistryAvroSerializer(client, groupName, new SchemaRegistryAvroSerializerOptions { AutoRegisterSchemas = true });
var employee = new Employee { Age = 42, Name = "Caketown" };
EventData eventData = (EventData) await serializer.SerializeAsync(employee, messageType: typeof(EventData));
// the schema Id will be included as a parameter of the content type
Console.WriteLine(eventData.ContentType);
// the serialized Avro data will be stored in the EventBody
Console.WriteLine(eventData.EventBody);
// construct a publisher and publish the events to our event hub
var fullyQualifiedNamespace = "<< FULLY-QUALIFIED EVENT HUBS NAMESPACE (like something.servicebus.windows.net) >>";
var eventHubName = "<< NAME OF THE EVENT HUB >>";
var credential = new DefaultAzureCredential();
// It is recommended that you cache the Event Hubs clients for the lifetime of your
// application, closing or disposing when application ends. This example disposes
// after the immediate scope for simplicity.
await using var producer = new EventHubProducerClient(fullyQualifiedNamespace, eventHubName, credential);
await producer.SendAsync(new EventData[] { eventData });
要反序列化您正在消费的事件数据 EventData 事件
// construct a consumer and consume the event from our event hub
// It is recommended that you cache the Event Hubs clients for the lifetime of your
// application, closing or disposing when application ends. This example disposes
// after the immediate scope for simplicity.
await using var consumer = new EventHubConsumerClient(EventHubConsumerClient.DefaultConsumerGroupName, fullyQualifiedNamespace, eventHubName, credential);
await foreach (PartitionEvent receivedEvent in consumer.ReadEventsAsync())
{
Employee deserialized = (Employee) await serializer.DeserializeAsync(eventData, typeof(Employee));
Console.WriteLine(deserialized.Age);
Console.WriteLine(deserialized.Name);
break;
}
您还可以使用通用方法来序列化和反序列化数据。如果您不是在 Avro 序列化器之上构建库,这可能更方便,因为您不必担心泛型的传染性
var serializer = new SchemaRegistryAvroSerializer(client, groupName, new SchemaRegistryAvroSerializerOptions { AutoRegisterSchemas = true });
var employee = new Employee { Age = 42, Name = "Caketown" };
EventData eventData = await serializer.SerializeAsync<EventData, Employee>(employee);
// the schema Id will be included as a parameter of the content type
Console.WriteLine(eventData.ContentType);
// the serialized Avro data will be stored in the EventBody
Console.WriteLine(eventData.EventBody);
类似地,进行反序列化
Employee deserialized = await serializer.DeserializeAsync<Employee>(eventData);
Console.WriteLine(deserialized.Age);
Console.WriteLine(deserialized.Name);
直接使用 MessageContent
序列化和反序列化数据
您还可以使用 MessageContent
进行序列化和反序列化。如果未集成任何与 MessageContent
一起工作的消息库,请使用此选项。
var serializer = new SchemaRegistryAvroSerializer(client, groupName, new SchemaRegistryAvroSerializerOptions { AutoRegisterSchemas = true });
MessageContent content = await serializer.SerializeAsync<MessageContent, Employee>(employee);
Employee deserializedEmployee = await serializer.DeserializeAsync<Employee>(content);
故障排除
如果在与模式注册表服务通信时遇到错误,这些错误将以RequestFailedException的形式抛出。序列化器仅在第一次遇到模式(在序列化时)或模式ID(在反序列化时)时才会与该服务通信。与无效内容类型相关的任何错误将以FormatException
的形式抛出。与无效模式相关的错误将以Exception
的形式抛出,并且InnerException
属性将包含由Apache Avro库抛出的基本异常。此类错误通常在测试期间捕获,不应在代码中处理。与不兼容模式相关的任何错误将以包含设置有Apache Avro库基本异常的InnerException
属性的Exception
的形式抛出。
下一步
有关更多信息,请参阅Azure Schema Registry。
贡献
此项目欢迎贡献和建议。大多数贡献要求您同意一项贡献者许可协议(CLA),声明您有权并且实际上已经向我们授予使用您的贡献的权利。有关详细信息,请访问cla.microsoft.com。
当您提交请求时,CLA机器人会自动判断您是否需要提供CLA,并相应地标记PR(例如,标签、注释)。只需遵循机器人提供的说明。您在整个使用我们的CLA的仓库中只需这样做一次。
此项目采用了Microsoft Open Source Code of Conduct。有关更多信息,请参阅行为准则FAQ或通过[email protected]联系以获取任何附加问题或评论。
产品 | 版本 兼容和附加的计算目标框架版本。 |
---|---|
.NET | net5.0已计算。 net5.0-windows已计算。 net6.0已计算。 net6.0-android已计算。 net6.0-ios已计算。 net6.0-maccatalyst已计算。 net6.0-macos已计算。 net6.0-tvos已计算。 net6.0-windows已计算。 net7.0已计算。 net7.0-android已计算。 net7.0-ios已计算。 net7.0-maccatalyst已计算。 net7.0-macos已计算。 net7.0-tvos已计算。 net7.0-windows已计算。 net8.0已计算。 net8.0-android已计算。 net8.0-browser已计算。 net8.0-ios已计算。 net8.0-maccatalyst已计算。 net8.0-macos已计算。 net8.0-tvos已计算。 net8.0-windows已计算。 |
.NET Core | netcoreapp2.0已计算。 netcoreapp2.1已计算。 netcoreapp2.2已计算。 netcoreapp3.0已计算。 netcoreapp3.1已计算。 |
.NET Standard | netstandard2.0兼容。 netstandard2.1已计算。 |
.NET Framework | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- Apache.Avro (>= 1.11.0)
- Azure.Core (>= 1.38.0)
- Azure.Data.SchemaRegistry (>= 1.2.0)
- Newtonsoft.Json (>= 13.0.3)
NuGet 包 (3)
显示依赖于 Microsoft.Azure.Data.SchemaRegistry.ApacheAvro 的顶部 3 个 NuGet 包
包 | 下载 |
---|---|
Furly.Azure.EventHubs
Furly Azure Event Hubs 扩展 |
|
Microsoft.Azure.Kafka.SchemaRegistry.Avro Azure Schema Registry 是 Azure Event Hubs 提供的托管模式仓库服务,旨在简化模式管理和数据治理。 |
|
EventProducer
Cheetah 事件生成器的 SDK |
GitHub 仓库
此包未用于任何流行的 GitHub 仓库。
版本 | 下载 | 最后更新 |
---|---|---|
1.0.1 | 35,219 | 3/29/2024 |
1.0.0 | 260,933 | 5/12/2022 |
1.0.0-beta.8 | 2,721 | 4/6/2022 |
1.0.0-beta.7 | 24,589 | 3/11/2022 |
1.0.0-beta.6 | 438 | 2/10/2022 |
1.0.0-beta.5 | 4,305 | 1/14/2022 |
1.0.0-beta.4 | 18,470 | 11/12/2021 |
1.0.0-beta.3 | 7,650 | 10/6/2021 |
1.0.0-beta.2 | 2,510 | 8/17/2021 |
1.0.0-beta.1 | 88,594 | 9/9/2020 |