当前位置: 首页 > 知识库问答 >
问题:

Azure EventHub:发送异步性能

古畅
2023-03-14
    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毫秒)的值,为什么会有这么长的执行时间?

共有1个答案

伊铭
2023-03-14

EventHubProducerClient缓慢地打开到事件集线器服务的连接,直到操作第一次需要它。在您的代码片段中,调用SendAsync将触发创建AMQP连接、创建AMQP链接和执行身份验证。

除非客户机关闭,否则大多数将来的调用不会产生这种开销,因为连接和链接是持久的。大多数是该语句中的一个重要区别,因为客户机可能需要在面对网络错误时重新连接,当活动较低且连接空闲时,或者如果事件集线器服务终止连接/链接时。

正如Serkant所提到的,如果您想了解时间安排,最好使用像benchmark.net这样的库,它可以通过大量的迭代获得统计上有意义的结果。

 类似资料:
  • 问题内容: 我有这样的表格: 我想异步发送这些数据,使用jQuery函数。 编辑:与解决方案: 问题答案: 看到: jQuery文档:发布 jQuery文档:序列化

  • 我正在使用Kafka客户端1.0.0库中的KafkaProducer,根据文档,该方法是

  • 我正在将SpringWebSocket 4.2.4与sockjs和stomp一起使用,并试图在异步任务中从服务器向所有订阅者发送消息,但运气不佳 我的班级是: 但是订阅者没有得到消息 有什么帮助吗?我做错了什么:( *编辑* 我的消息代理: 当我订阅时: 谢谢 **编辑2:** 谢谢你帮我解决这个问题:)

  • 主要内容:1 invokeOneway单向发送,1.1 invokeOnewayImpl单向调用,2 sendMessageSync同步发送,2.1 invokeSync同步调用,3 sendMessageAsync异步发送消息,3.1 invokeAsync异步调用,3.2 onExceptionImpl异常处理,4 NettyClientHandler处理服务端消息,4.1 processResponseCommand处理响应,基于RocketMQ release-4.9.3,深入的介绍了P

  • 我试图找出如何在事务上下文中正确处理原子级的对Kafka的多次写入。在此场景中,事务不是由kafka消息侦听器启动的,而是通过@Transactional注释以编程方式启动的,请参见下面的代码段。 我使用的是spring boot 2.4.2和spring kafka 2.6.5。 KafkaProducer文档指出,在事务上下文中,不需要调用。get(),因为它最终会在尝试提交事务时引发异常。此

  • 我有一个BE服务a,它正在使用假客户端向microservice B发送Rest JSON消息: 终点: Rest Endpoint正在向AWS Ses邮件或其他邮件提供商发送邮件。 问题是来自飞格的第一个呼叫可能需要5秒或更长时间。我需要使其异步,以便FE客户端不要等待邮件发送。 我如何可以使从飞度异步发出的Rest调用到超文本传输协议响应OK没有等待时间可以预期?是否有一些更好的解决方案来实现