【问题标题】:Azure EventHub: Send Async performanceAzure EventHub:发送异步性能
【发布时间】:2021-04-02 15:20:15
【问题描述】:

我的代码很幼稚:

    public async Task Produce(string topic, object message, MessageHeader messageHeaders)
    {
        try
        {
            var producerClient = _EventHubProducerClientFactory.Get(topic);
            var eventData = CreateEventData(message, messageHeaders);

            messageHeaders.Times?.Add(DateTime.Now);
            await producerClient.SendAsync(new EventData[] { eventData });
            messageHeaders.Times?.Add(DateTime.Now);
            //.....
            Log.Info($"Milliseconds spent: {(messageHeaders.Times[1]- messageHeaders.Times[0]).TotalMilliseconds});
        }
    }

    private EventData CreateEventData(object message, MessageHeader messageHeaders)
    {
        var eventData = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)));
        eventData.Properties.Add("CorrelationId", messageHeaders.CorrelationId);

        if (messageHeaders.DateTime != null)
            eventData.Properties.Add("DateTime", messageHeaders.DateTime?.ToString("s"));
        if (messageHeaders.Version != null)
            eventData.Properties.Add("Version", messageHeaders.Version);

        return eventData;
    }

在日志中我有将近 1 秒的值(~ 800 毫秒) 执行时间如此长的原因可能是什么?

【问题讨论】:

  • CreateEventData(message) 中有什么
  • @PeterBons,添加到问题中
  • @IanMercer,不确定,在这种情况下我不能使用分组事件来批量发送它们,我正在缓存 EventHubProducerClient(通过 _EventHubProducerClientFactory)

标签: c# azure .net-core azure-eventhub


【解决方案1】:

EventHubProducerClient 延迟打开与事件中心服务的连接,一直等到操作第一次需要它。在您的 sn-p 中,对 SendAsync 的调用会触发要创建的 AMQP 连接、要创建的 AMQP 链接以及要执行的身份验证。

除非客户端关闭,否则大多数未来的调用都不会产生这种开销,因为连接和链接是持久的。 大多数是该语句中的一个重要区别,因为客户端可能需要在网络错误、活动量低且连接空闲时或事件中心服务终止连接时重新连接/链接。

正如 Serkant 所提到的,如果您想了解时序,最好使用像 Benchmark.NET 这样的库,它可以通过大量迭代来获得具有统计意义的结果。

【讨论】:

    【解决方案2】:

    您正在测量第一个“发送”。这将产生一些其他发送不会产生的开销。所以,总是先做热身,比如发送单个事件,然后测量下一个事件。

    另一个重要的事情。仅衡量单个“发送”呼叫是不正确的。而是测量一堆调用并计算延迟百分位数。这应该为您的测试提供更好的数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多