c# - 大量数据未在 Azure 事件中心发布
问题描述
我正在使用EventHubProducerClient类在 Azure 事件中心发布消息。当我尝试发送大量数据时,比如一条一条地发送 1000 条消息,这个测试用例通过了,但我在事件中心仪表板上只看到 400-500(随机数)。这是代码。
public async Task TestEventHubPublishMessagesSequentially()
{
var eventHubConnectionString = "XXXXX.CONNECTION STRING.XXXX";
var eventHubName = "XXXXX.EVENT HUB NAME.XXXX";
var messsage = "I am a message"
int tobePublishCount = 2000;
int publishCount = 0;
for (int i = 0; i < tobePublishCount; i++)
{
var completeMessage = $"Index:{i}-message";
var success = await PublishMessageSequentially(eventHubConnectionString, eventHubName, completeMessage);
if (success)
{
publishCount++;
}
}
Assert.Equal(2000, publishCount);
}
public async Task<bool> PublishMessageSequentially(string eventHubConnectionString, string eventHubName, string messageToPublish)
{
await using (var producerClient = new EventHubProducerClient(eventHubConnectionString, eventHubName))
{
using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
var data = new Azure.Messaging.EventHubs.EventData(Encoding.UTF8.GetBytes(messageToPublish));
if (eventBatch.TryAdd(data))
{
await producerClient.SendAsync(eventBatch);
return true;
}
}
return false;
}
但是,如果我尝试在列表中发布它们,我可以在事件中心看到所有数据。
List<string> totalMessages = new List<string>();
for (int i = 0; i < tobePublishCount; i++)
{
totalMessages.Add($"Index: {i}, I am a message");
}
await PublishMessageTogether(eventHubConnectionString, eventHubName, completeMessage);
public async Task PublishMessageTogether(string eventHubConnectionString, string eventHubName, List<string> messagesToPublish)
{
await using (var producerClient = new EventHubProducerClient(_eventHubsConnectionString, _eventHubName))
{
List<Azure.Messaging.EventHubs.EventData> azureEventData = new List<Azure.Messaging.EventHubs.EventData>>();
foreach(var messageToPublish in messagesToPublish)
{
var eventData = new Azure.Messaging.EventHubs.EventData(Encoding.UTF8.GetBytes(message));
azureEventData.Add(eventData);
}
await producerClient.SendAsync(azureEventData);
}
return publishCount;
}
}
我不知道出了什么问题,唯一的区别是,我可以看到我正在一次又一次地创建 EventHubProducerClient 的新对象,但我也在处理它。我认为事件中心旨在消耗大量数据(每秒数百万)。我的用例是我必须一一发布。
解决方案
推荐阅读
- swift - 来自单个 UIButton 的两个“不同”按钮?
- python - 返回类的列表参数给出 TypeError
- javascript - 为什么 JSON.parse(str) 变成 String?
- batch-file - 有没有办法从文本文件中删除空格?(或首先阻止它)
- javascript - 使用 JQuery Mobile 进行多页面设计的问题
- java - 如何遍历 Object 引用的数组?
- android - 使用 Google 身份验证更改生产应用程序的 Firebase 项目?
- verilog - 使用iverilog进行语法检查
- vue.js - 在 sessionStorage 上持久化 Vuex 状态是否安全?
- c++ - ROS 时间 - time_duration 超出双 32 位范围