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