Dapr 输入绑定与 Azure 事件中心同步处理消息

问题描述

我们使用 dapr 和输入绑定来使用来自 Azure 事件中心的 IoT 事件。 事件中心有 32 个分区,发送方使用设备 ID 作为分区键。 接收事件的控制器将它们委托给 dapr Actors 进行处理。

现在我的期望是,每个分区中的消息都是并行处理的,从而导致对接收事件的控制器的并行请求允许处理多达 32 个并发事件批次。

然而,测试表明事件是同步接收的。紧接在前一个事件的全部处理完成后接收后续事件。

现在我知道参与者按照设计一个一个地处理消息,但我没有根据 the documentation 阅读类似这样的输入绑定。

有什么我完全遗漏的吗?否则我无法想象这个系统是如何扩展的。

我们使用 dapr 0.11 以及在 AKS 集群中运行的 ASP.NET Core 3.1。

解决方法

我刚刚在 GitHub 上得到了一个答案:https://github.com/dapr/components-contrib/issues/759

所以基本上这证实了我基于当前版本的 dapr 事件中心绑定的观察。

但是,您可以手动配置每个 dapr 组件的分区 ID。因此,要同时读取 32 个分区,您目前必须使用 32 个 dapr 组件,每个组件都从一个单独的分区读取。

引用上面的 GitHub 问题:

[...] you can specify a Dapr component per partition ID: https://docs.dapr.io/operations/components/setup-bindings/supported-bindings/eventhubs/

If you set the partitionID field on the component metadata,the consumer will pull all messages for that partition ID.
Otherwise,it'll pull from all partitions.

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...