【问题标题】:Azure event hub, receive events only after processing previous events?Azure 事件中心,仅在处理以前的事件后接收事件?
【发布时间】:2019-08-24 02:17:41
【问题描述】:

我通过这个 npm 包 @azure/events-hub 为项目使用 azure 事件中心

我想知道是否有办法让事件接收器在处理完之前接收到的事件后才接收新事件。关键是我想一次处理一个事件。 我目前的观察是,它会在事件可用时将事件发送给处理程序。

我使用的 api 是文档中的 client.receive(partitionId, onMessage, onError)。 想知道是否有办法通过这个 api 实现上述行为。

【问题讨论】:

  • 如果您想按顺序处理消息,那么事件中心可能不是最佳解决方案,因为它是为大规模事件处理而设计的。使用 Azure 服务总线可能会更好

标签: javascript node.js azure-eventhub


【解决方案1】:

client.receive() 方法返回一个 RecieverHandler 对象,您可以使用它的stop() 方法来停止流。然后,您将使用新的 client.receive() 重新启动它。

另一个选项是使用client.recieveBatch(),其中最大批量大小设置为 1。

这两个选项都不理想 - 正如 Peter Bons 所提到的,事件中心不是为缓慢传输数据而设计的。该服务假定您将能够以与收到的消息相同的速度接受消息,并且您将只有每个分区 1 个接收器。 Service Bus 确实是一个很好的选择。您可以选择一次接收多少条消息并连接多个接收器,每个接收器一次处理一条消息,以扩展您的解决方案。

【讨论】:

    【解决方案2】:

    您所描述的是需要背压,而最新版本的@azure/event-hubs 包确实解决了这个问题。它确保您仅在处理了先前接收的事件之后才接收事件。默认情况下,您将接收大小为 10 的批次的事件,并且此大小是可配置的。

    如果您需要升级当前应用程序以使用最新版本的软件包,请参阅migration guide from v2 to v5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多