使用什么 Azure 消息服务?
What Azure Messaging Service to use?
我有一个特定案例想使用 Azure 消息服务来解决,但我不确定使用哪一个。有 7 个可供选择,我想我已经缩小到 2 个选项了。
- Azure 服务总线主题
- Azure 事件中心
我将尝试使用下图来解释我的需求。请记住,这只是一个虚构的场景,只是为了说明我所追求的。
- 用户更新了产品。 HTTP 请求发送到 MVC 应用程序。
- MVC 应用程序将
UpdateProductCommand
放在总线上(什么 Azure 总线?)
- 在 Azure 内部,无论是 Azure Functions 还是其他东西,都必须处理命令。
- 在命令处理程序中,我想发布一个事件,告诉所有监听方某项任务已被处理。
- 所以
ProductUpdatedEvent
发表了
- 将有超过 1 个应用程序有兴趣使用此事件。这些应用程序可以作为 Azure Functions 存在于 Azure 中。但应用程序也必须能够使用托管在外部服务器上的事件。例如在我自己的 IIS 服务器中。
要求:
- 当消耗事件的 application/eventhandler 关闭 x 时间,然后再次启动时,它应该能够处理它错过的所有事件。
- 一个事件可以被多个事件处理程序使用。所有事件处理程序都应处理该事件。
- 事件必须能够携带数据。如截图右侧。我希望能够发送有关已更新产品的数据。
哪种 Azure 消息服务技术最符合此描述?
我会推荐 Azure 服务总线。
客户可以负责创建他们自己的订阅并获取他们自己的您发送的消息实例。因此,在图表的最后一部分,Product Microservice/Inventory 微服务每个人都能够以自己的速度处理消息,如果其中一个出现故障,也不会影响另一个,他们都能够读取自己的消息信息。它被发送一次并读取两次。
您可以查看服务总线的层级,看看 cost/storage 是否满足您的需求,但您应该能够根据您的主题存储数百万 (80Gb) 条消息放入消息中。每条消息最多可以包含 1Mb 的文本,因此您的号码会因您所做的事情而有所不同。然后微服务重新上线,它可以处理积压的工作。
我的 2 美分,因为两者都可以用来实现相同的目标,一些架构师会决定使用一个,其他的则选择另一个:
我相信你已经阅读了documentation从消息和事件的区别开始,以及背后的哲学。
- “消息的发布者对消费者如何处理消息有期望”
- “事件的发布者对事件的处理方式没有期望”
据此,根据您的要求,我了解到您的发布者不关心处理程序将如何处理事件 - 对于发布者来说,它不代表值,因为处理程序不应发送任何 response/confirmation .这在 Event-Hub 'spirit'
现在,你说要承载数据。根据定义,再次来自文档:
- “事件是条件或状态更改的轻量级通知”
- “消息包含触发消息管道的数据。”
因此,'carrying a data' 与其说是事件,不如说是一条消息,因为消息包含信息,而事件包含状态已更改的事实。这在服务总线主题 'spirit' 和理念中更是如此,因为消息包含 high-value 不应丢失的事务数据。
另一项要求,也是我认为最重要的要求,是您希望拥有多个事件处理程序。
现在,拥有多个 event-handler 和 Event-Hub 的方法是为它们中的每一个创建一个单独的消费者组。
您可以拥有多个 event-handler 与 Service-Bus 主题的方法是您只需订阅即可。
所以最后,我的 2 美分,如果你想要更多的处理程序具有更大的灵活性,我会选择服务总线主题,因为你可以在运行时添加任意数量的订阅者(事件处理程序)希望,无需对服务总线主题本身进行任何调整,
如果您认为您的解决方案将更多地朝着您将拥有有限数量 handlers/consumers 的方向发展,并且您可能有并发事件发布者,那么我会在此处选择 Event-Hub ,我会为我的每个处理程序创建一个消费者组——这不是我从你最初的要求中理解的。
我有一个特定案例想使用 Azure 消息服务来解决,但我不确定使用哪一个。有 7 个可供选择,我想我已经缩小到 2 个选项了。
- Azure 服务总线主题
- Azure 事件中心
我将尝试使用下图来解释我的需求。请记住,这只是一个虚构的场景,只是为了说明我所追求的。
- 用户更新了产品。 HTTP 请求发送到 MVC 应用程序。
- MVC 应用程序将
UpdateProductCommand
放在总线上(什么 Azure 总线?) - 在 Azure 内部,无论是 Azure Functions 还是其他东西,都必须处理命令。
- 在命令处理程序中,我想发布一个事件,告诉所有监听方某项任务已被处理。
- 所以
ProductUpdatedEvent
发表了 - 将有超过 1 个应用程序有兴趣使用此事件。这些应用程序可以作为 Azure Functions 存在于 Azure 中。但应用程序也必须能够使用托管在外部服务器上的事件。例如在我自己的 IIS 服务器中。
要求:
- 当消耗事件的 application/eventhandler 关闭 x 时间,然后再次启动时,它应该能够处理它错过的所有事件。
- 一个事件可以被多个事件处理程序使用。所有事件处理程序都应处理该事件。
- 事件必须能够携带数据。如截图右侧。我希望能够发送有关已更新产品的数据。
哪种 Azure 消息服务技术最符合此描述?
我会推荐 Azure 服务总线。
客户可以负责创建他们自己的订阅并获取他们自己的您发送的消息实例。因此,在图表的最后一部分,Product Microservice/Inventory 微服务每个人都能够以自己的速度处理消息,如果其中一个出现故障,也不会影响另一个,他们都能够读取自己的消息信息。它被发送一次并读取两次。
您可以查看服务总线的层级,看看 cost/storage 是否满足您的需求,但您应该能够根据您的主题存储数百万 (80Gb) 条消息放入消息中。每条消息最多可以包含 1Mb 的文本,因此您的号码会因您所做的事情而有所不同。然后微服务重新上线,它可以处理积压的工作。
我的 2 美分,因为两者都可以用来实现相同的目标,一些架构师会决定使用一个,其他的则选择另一个:
我相信你已经阅读了documentation从消息和事件的区别开始,以及背后的哲学。
- “消息的发布者对消费者如何处理消息有期望”
- “事件的发布者对事件的处理方式没有期望”
据此,根据您的要求,我了解到您的发布者不关心处理程序将如何处理事件 - 对于发布者来说,它不代表值,因为处理程序不应发送任何 response/confirmation .这在 Event-Hub 'spirit'
现在,你说要承载数据。根据定义,再次来自文档:
- “事件是条件或状态更改的轻量级通知”
- “消息包含触发消息管道的数据。”
因此,'carrying a data' 与其说是事件,不如说是一条消息,因为消息包含信息,而事件包含状态已更改的事实。这在服务总线主题 'spirit' 和理念中更是如此,因为消息包含 high-value 不应丢失的事务数据。
另一项要求,也是我认为最重要的要求,是您希望拥有多个事件处理程序。 现在,拥有多个 event-handler 和 Event-Hub 的方法是为它们中的每一个创建一个单独的消费者组。 您可以拥有多个 event-handler 与 Service-Bus 主题的方法是您只需订阅即可。
所以最后,我的 2 美分,如果你想要更多的处理程序具有更大的灵活性,我会选择服务总线主题,因为你可以在运行时添加任意数量的订阅者(事件处理程序)希望,无需对服务总线主题本身进行任何调整,
如果您认为您的解决方案将更多地朝着您将拥有有限数量 handlers/consumers 的方向发展,并且您可能有并发事件发布者,那么我会在此处选择 Event-Hub ,我会为我的每个处理程序创建一个消费者组——这不是我从你最初的要求中理解的。