首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中为泛型类型创建Avro模式?

如何在C#中为泛型类型创建Avro模式?
EN

Stack Overflow用户
提问于 2019-05-13 19:46:30
回答 1查看 869关注 0票数 7

我正在开发一个使用Kafka和合流.NET客户端的.NET标准酒吧/子包。我的制作人有以下界面。

IEventPublisher.cs

代码语言:javascript
复制
public interface IEventPublisher<T>
{
    bool Publish(Event<T> evnt);
}

我的KafkaEventPublisher<T>类实现了这个接口,并且发布的有效载荷T被包装在一个Event<T>信封中。

Event.cs

代码语言:javascript
复制
public class Event<T>
{
    // Some other properties 

    public T Payload { get; set; }
}

my组件的初始实现不使用Avro序列化程序或架构注册表。它使用Event<T>Newtonsoft.Json序列化为JSON,并生成一个卡夫卡主题的字符串。这样做的好处是,有效载荷可以是任何对象。主题名称是对象的完全限定类名,因此保证主题是同构的。缺点是对卡夫卡来说,有效载荷是不透明的。

我现在正致力于将Newtonsoft.Json转换为Avro和架构注册表。这似乎表明我的模特不可能再做任何事了。必须专门编写它们,以便通过实现ISpecificRecord接口来实现Avro序列化。如果这是真的,那是不理想的,但我可以接受。

我似乎无法理解的问题是如何将Event<T>信封集成到Avro模式中。有没有一种方法可以在另一个模式中嵌套模式?我的所有具体模式是否也应该定义Event<T>信封?改用GenericRecord并尝试使用反射在运行时自动生成模式,这样我的组件就可以返回到接受任何对象作为有效负载吗?

EN

回答 1

Stack Overflow用户

发布于 2021-07-22 13:16:01

也许有一种更优雅的方法,但是在每个模式中都包含正确的东西应该可以做到这一点。也许您希望以编程的方式这样做,以确保一致性。

通常,一切正常工作,除非您发现自己试图检查每条消息,并为每个单独的消息定义模式。这可能是可能的,但肯定是不可取的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56118965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档