Azure 事件中心,仅在处理以前的事件后才接收事件?

Azure event hub, receive events only after processing previous events?

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

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

我使用的 api 是文档中的 client.receive(partitionId, onMessage, onError)。 想知道是否有办法通过 api.

实现上述行为

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

重新启动它

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

这两种选择都不理想 - 正如 Peter Bons 所提到的,事件中心不是为 data.The 服务的缓慢滴设计而设计的每个分区只有 1 个接收器。 Service Bus 确实是一个值得研究的好选择。您可以选择一次接收多少条消息并连接多个接收器,每个接收器一次处理一条消息,以扩展您的解决方案。

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

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