我已设置Azure 事件中心。有 2 个发布商:
发布商 1(使用发送策略)
发布商 2(使用发送策略)
发布商 1 将发送事件 1,发布商 2 将发送事件 2。事件 1 和事件 2 的格式不同。
问题 1:这意味着我们在 EH 中有不同的消息 - 这种方法的权衡是什么?我是否应该创建 2 个 EH(一个用于发布者 1,另一个用于发布者 2)?最佳实践和设计理念是什么?
如果我采用上述方法,我必须设置一个具有监听策略的消费者来查找这些事件并解析/转换这些事件并反序列化它们。
问题 2:我需要 2 个消费者(消费者 1 和消费者 2)来读取发送给他们的消息吗? (消费者 1 将仅读取事件 1,消费者 2 将仅读取事件 2)?
最佳答案
场景 1:一个事件中心适用于多种事件类型
在这种情况下,您在发送和处理消息时有多种选择:
- 只需将消息发送到事件中心即可。编写一个读取消息的消费进程,并根据类型对它们进行不同的处理。
- 只需将消息发送到事件中心即可。创建不同的消费者组,每个组对应一种消息类型。有两个进程都读取自己的消费者组并跳过它们没有资格处理的消息。 (每个消费者组本质上读取相同的数据,但它们可以位于数据流中的不同位置)。请参阅Azure event hubs and multiple consumer groups
- 将消息发送到指定分区。例如,将类型 A 的消息发送到分区 1,将类型 B 的消息发送到分区 2。但这可能会影响事件中心的可扩展性。每个(一组)分区创建专用进程。每个进程将只处理相同类型的消息。请参阅https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-programming-guide#partition-key和 https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-programming-guide#create-a-partition-sender
场景 2:每种事件类型一个事件中心
这个很简单,只需创建 2 个事件中心和 2 个消耗进程即可。但您必须管理 2 个事件中心,并且考虑到事件中心的功能,这可能有点过大了。
我的建议
这取决于数据量,但根据我的经验,我会将所有消息发送到一个事件中心,并让一个进程读取消息并使用一些 C# 代码根据消息类型执行操作。
关于c# - Azure 事件中心 - 同一事件中心中的多种事件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46354005/