使用哪种Azure消息服务?

使用哪种Azure消息服务?,azure,azureservicebus,azure-eventhub,Azure,Azureservicebus,Azure Eventhub,我有一个特定的案例,我想使用Azure消息服务来解决,但我不确定使用哪一个。有7个选项可供选择,我想我已经缩小到2个选项 Azure服务总线主题 Azure事件中心 我将尝试使用下图来解释我的需求。请记住,这只是一个虚构的场景,只是为了说明我在追求什么 用户更新产品。HTTP请求被发送到MVC应用程序。 MVC应用程序在总线上放置UpdateProductCommander什么Azure总线? 在Azure内部,无论是Azure函数还是其他什么,都必须处理该命令。 在命令处理程序中,我想发布一个

我有一个特定的案例,我想使用Azure消息服务来解决,但我不确定使用哪一个。有7个选项可供选择,我想我已经缩小到2个选项

Azure服务总线主题 Azure事件中心 我将尝试使用下图来解释我的需求。请记住,这只是一个虚构的场景,只是为了说明我在追求什么

用户更新产品。HTTP请求被发送到MVC应用程序。 MVC应用程序在总线上放置UpdateProductCommander什么Azure总线? 在Azure内部,无论是Azure函数还是其他什么,都必须处理该命令。 在命令处理程序中,我想发布一个事件,告诉所有侦听方某个任务已被处理。 所以一个ProductUpdateEvent被发布 将有多个应用程序对使用此事件感兴趣。这些应用程序可以作为Azure功能存在于Azure中。但应用程序也必须能够使用托管在外部服务器上的事件。例如,在我自己的IIS服务器内部。 要求:

当使用某个事件的应用程序/事件处理程序宕机x次,然后再次启动时,它应该能够处理它错过的所有事件。 一个事件可以由多个事件处理程序使用。所有事件处理程序都应处理该事件。 事件必须能够承载数据。比如在屏幕截图的右边。我希望能够发送有关已更新产品的数据。
哪种Azure消息服务技术最适合此描述?

我建议使用Azure服务总线

客户端可以负责创建自己的订阅,并获取自己发送的消息实例。因此,在图表的最后部分,产品微服务/库存微服务将能够以各自的速率处理消息,如果其中一个发生故障,则不会影响另一个,它们都能够读取自己的消息。它发送一次,读取两次


您可以查看服务总线的各个层,看看成本/存储是否满足您的需要,但您应该能够存储数百万条80Gb的主题消息,具体取决于您在消息中输入的内容。每条消息最多可以有1Mb的文本,因此您的号码会因您所做的操作而有所不同。然后微服务重新上线,它可以处理积压工作。

我建议使用Azure服务总线

客户端可以负责创建自己的订阅,并获取自己发送的消息实例。因此,在图表的最后部分,产品微服务/库存微服务将能够以各自的速率处理消息,如果其中一个发生故障,则不会影响另一个,它们都能够读取自己的消息。它发送一次,读取两次


您可以查看服务总线的各个层,看看成本/存储是否满足您的需要,但您应该能够存储数百万条80Gb的主题消息,具体取决于您在消息中输入的内容。每条消息最多可以有1Mb的文本,因此您的号码会因您所做的操作而有所不同。然后微服务重新上线,它可以处理积压工作。

2美分,因为两者都可以实现同样的效果,一些架构师会选择其中一个,其他架构师选择另一个:

我相信你已经读过这本书,它从信息和事件之间的区别以及背后的哲学开始

消息的发布者对消费者如何处理消息有一个期望 事件的发布者对事件的处理方式没有期望 从这一点出发,并根据您的要求,我了解到您的发布者并不关心处理程序将如何处理事件-对于发布者来说,它并不表示值,因为处理程序不应发送任何响应/确认。这在活动中心“精神”中体现得更多

现在,你说你想携带数据。根据定义,同样来自文档:

事件是条件或状态更改的轻量级通知 消息包含触发消息管道的数据。 因此,“携带数据”与其说是事件,不如说是消息,因为消息包含信息,而事件包含状态已更改的事实。这更多地体现在服务总线主题“精神”和理念中,因为消息包含不应丢失的高价值事务数据

另一个要求,也是我认为最重要的一个要求是,您希望有多个事件处理程序。 现在,使用event Hub拥有多个事件处理程序的方法是为每个事件处理程序创建一个单独的使用者组。 您可以通过服务总线主题拥有多个事件处理程序的方式是您只需订阅

所以最后,我的2美分,如果你想要更多的哈 如果处理程序更灵活,我将使用服务总线主题,因为您可以在运行时添加任意数量的SubscriberEvent处理程序,而无需对服务总线主题本身进行任何调整


如果您认为您的解决方案将朝着拥有有限数量的处理程序/使用者的方向发展,并且您可能拥有并发事件发布者,那么我会在这里选择事件中心,我会为我的每个处理者创建一个消费者群体——这不是我从您的初始需求中了解到的。

我在这方面的2美分,因为两者都可以实现相同的效果,一些架构师会选择其中一个,其他人选择另一个:

我相信你已经读过这本书,它从信息和事件之间的区别以及背后的哲学开始

消息的发布者对消费者如何处理消息有一个期望 事件的发布者对事件的处理方式没有期望 从这一点出发,并根据您的要求,我了解到您的发布者并不关心处理程序将如何处理事件-对于发布者来说,它并不表示值,因为处理程序不应发送任何响应/确认。这在活动中心“精神”中体现得更多

现在,你说你想携带数据。根据定义,同样来自文档:

事件是条件或状态更改的轻量级通知 消息包含触发消息管道的数据。 因此,“携带数据”与其说是事件,不如说是消息,因为消息包含信息,而事件包含状态已更改的事实。这更多地体现在服务总线主题“精神”和理念中,因为消息包含不应丢失的高价值事务数据

另一个要求,也是我认为最重要的一个要求是,您希望有多个事件处理程序。 现在,使用event Hub拥有多个事件处理程序的方法是为每个事件处理程序创建一个单独的使用者组。 您可以通过服务总线主题拥有多个事件处理程序的方式是您只需订阅

最后,我的2美分,如果你想在处理程序上有更多的灵活性,我会选择服务总线主题,因为你可以在运行时添加任意数量的SubscriberEvent处理程序,而无需对服务总线主题本身进行任何调整


如果您认为您的解决方案将朝着拥有有限数量的处理程序/使用者的方向发展,并且您可能拥有并发事件发布者,那么我会在这里选择事件中心,我只想为我的每个处理者创建一个消费者群体——这不是我从您最初的要求中了解到的。

请注意消费者群体的最大数量!请注意消费者群体的最大数量!我要说的是,命令使用azure服务总线,事件使用事件网格。我想知道你为什么不考虑事件网格?我想说的是,命令使用azure服务总线,事件使用事件网格。我想知道你为什么把事件网格排除在等式之外?