azure - 带有事件中心触发器的 Azure 函数接收到奇怪数量的事件
问题描述
我有一个连接到它的事件中心和 Azure 函数。使用少量数据一切都很好,但是当我用 10 000 个事件对其进行测试时,我得到了非常奇特的结果。出于测试目的,我将 0 到 9999 的数字发送到事件中心,并在应用程序洞察和服务总线中记录数据。对于我在 Azure 中看到的第一个测试,集线器正好有 10 000 个事件,但服务总线和 AI 收到了 0 到 4500 之间的所有消息,并且在 4500 之后每隔一秒收到消息(所以它丢失了大约 30%)。在第二次测试中,我收到了从 0 到 9999 的所有消息,但是在 3500 和 3200 之间的每一秒消息都是重复的。我想一次收到所有消息,我做错了什么?
public async Task Run([EventHubTrigger("%EventHubName%", Connection = "AzureEventHubConnectionString")] EventData[] events, ILogger log)
{
int id = _random.Next(1, 100000);
_context.Log.TraceInfo("Started. Count: " + events.Length + ". " + id); //AI log
foreach (var message in events)
{
//log with ASB
var mess = new Message();
mess.Body = message.EventBody.ToArray();
await queueClient.SendAsync(mess);
}
_context.Log.TraceInfo("Completed. " + id); //AI log
}
解决方案
通过使用 EventData[] 事件,您以批处理模式从集线器读取事件,这就是为什么您一次看到 X 事件处理,然后在接下来的几秒钟内处理下一批。
而不是 EventData[] 只需使用EventData。
当您将事件发送到集线器时,如果您想尝试批处理,请检查所有事件是否使用相同的分区键发送,否则它们可以根据 TU(吞吐量单位)、PU(处理单位)和 CU(容量单位)分成几个分区.
出口:高达每秒 2 MB 或每秒 4096 个事件。
Basic、Standard、Premium.. 的吞吐量限制:
推荐阅读
- php - 我有一个基于从下拉菜单中选择的日期创建的 pdf 报告。我不知道该怎么做
- javascript - 将参数传递给 addEventListener 给出“未定义”
- java - 无法使用 JSONObject 更新 .json 文件中的子节点
- jquery - 如何使用 jQuery 中的类选择器更改表的 td 的背景颜色
- javascript - 异步混淆。处理 API 响应并失去对这段代码中发生的事情的掌握
- ascii - ASCII码挑战
- python - 遍历一个将 range 作为元素的 lisit 并扩展它
- python-3.x - 嵌套字典理解提取一个键值对
- javascript - await 不等待承诺在节点 js 中返回
- python - 在 Flask MySQL 和 SqlAlchemy 命令 db.create_all() 中给出错误