Azure EventGrid 主题和事件的最佳做法是什么?
将不同的事件类型发布到同一个 Azure EventGrid 主题是不是一个坏主意?例如多个不同的领域事件
我们什么时候需要不同的主题?整个应用程序的单个共享主题?每个聚合根类型一个主题?每个事件类型一个主题?
欢迎任何建议,因为没有明确的答案
第2部分。
如果我想与各种 Azure 逻辑应用集成怎么办?如果多个逻辑应用对同一个主题做出反应,它们会互相窃取消息吗?每个逻辑应用都会创建一些不可见的订阅吗?
Azure EventGrid 主题和事件的最佳做法是什么?
将不同的事件类型发布到同一个 Azure EventGrid 主题是不是一个坏主意?例如多个不同的领域事件
我们什么时候需要不同的主题?整个应用程序的单个共享主题?每个聚合根类型一个主题?每个事件类型一个主题?
欢迎任何建议,因为没有明确的答案
第2部分。
如果我想与各种 Azure 逻辑应用集成怎么办?如果多个逻辑应用对同一个主题做出反应,它们会互相窃取消息吗?每个逻辑应用都会创建一些不可见的订阅吗?
不,将不同的事件类型发布到同一个 Azure EventGrid 主题并不是一个坏主意:如果事件与同一个资源相关,那么将它们发布到同一个 EventGrid 主题确实有意义。以 HR 应用程序为例,您可以在同一个“员工”主题上发布 EmployeeAdded 和 EmployeeRemoved 事件。
关于何时需要不同主题的问题,我认为这取决于几个因素,例如您如何对应用程序中的资源进行建模、对这些资源感兴趣的事件、系统的哪些部分应该能够使用的安全模型发布到主题/在主题上创建事件订阅。理想情况下,同一资源类型(例如上例中的“员工”资源类型)的所有类型的事件都可以针对同一主题。当您的系统具有更多类型的资源时,您可能希望为每个资源创建单独的主题。此外,还必须考虑所需的安全模型(例如,假设您想限制谁可以接收某些类型的事件)。
关于逻辑应用的问题,如果您创建多个处理来自同一主题的事件的逻辑应用,它们中的每一个都会在同一主题上创建一个事件订阅,并且事件网格会将该主题上的事件传递给每个事件订阅。因此,每个逻辑应用都会单独接收相同的事件,并且可以独立于其他应用来处理它。
Azure 事件网格 (AEG) 不是通用的 Pub/Sub 模型。该模型基于事件源,其中每个事件源 (topicType) 都在处理自己的兴趣。
订阅者使用订阅订阅对事件源(主题)的兴趣。请注意,AEG 只允许订阅订阅中的一个主题。每个主题有 500 个订阅限制。
换句话说,如果同一订阅者对事件源(主题)有多个兴趣,则此模型需要为每个订阅者创建多个订阅(每个主题一个)。兴趣的过滤只能在同一主题内进行。
AEG 中的事件源可以通过自定义主题进行扩展(每个 Azure 订阅最多 100 个)。
基于以上所述,我确实建议自定义主题使用相同的模型,例如为具有多个 eventTypes 的 azure 事件源 (topicTypes) 内置的模型,这可以简化在环境中的持续部署。
第 2 部分: AEG 不使用“隐形”订阅作为集成的一部分。为主题创建的每个订阅都是可见且可访问的,例如使用REST API
更新:
Azure 事件网格最近发布(预览版 - 版本 2018-09-15-preview)一个新功能,可以帮助您使用事件域和域主题的解决方案,更多详细信息请点击此处。
您可以使用更新的工具Azure Event Grid Tester来测试尚未在 Azure 门户 UI 中实现的所有新预览版功能。