将HttpClient与NServiceBus结合使用会严重延迟

我正在使用NServiceBus进行集成POC。发生某些情况时,此集成会向API发出通知。


一切正常,但是在执行并发http请求时会出现严重的性能问题。


我配置了一个可以执行以下操作的终结点:将JSON请求(通知)发送到REST API。


我的设置:


端点(框架4.6.1)具有1个静态HttpClient,该静态HttpClient在程序启动时仅初始化一次:


internal static void Intitialize()

        {

            ServicePointManager.DefaultConnectionLimit = 100;

            var apiSettings = NotificationEngineManager.GetInterfaceSettings()?.API;

            NotificationClient = new HttpClient();

            NotificationClient.Timeout = TimeSpan.FromSeconds(45);

            if (!string.IsNullOrEmpty(apiSettings.UserName))

            {

                var byteArray = Encoding.ASCII.GetBytes($"{apiSettings.UserName}:{apiSettings.Password}");

                NotificationClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

            }

        }


        internal static HttpClient NotificationClient { get; set; }

我的处理程序负责发布请求:


   public async Task Handle(EventRegistered message, IMessageHandlerContext context)

            {

                var apiSettings = NotificationEngineManager.GetInterfaceSettings()?.API;

                if (apiSettings == null)

                {

                    throw new BusinessException("No valid API settings found");

                }


                JsonSerializerSettings settings = new JsonSerializerSettings();

                settings.NullValueHandling = NullValueHandling.Ignore;

                settings.DateFormatString = "s";

                settings.Converters.Add(new StringEnumConverter { });

问题:


NServiceBus端点同时处理10条消息,这意味着同时处理10个http发布请求。


Rest API大约需要0.2秒来响应1条消息。但是同时触发10个http发布请求大约需要35秒。所有请求均在同一时间开始,但也都在同一时间结束(大约35秒后)。


哈士奇WWW
浏览 133回答 1
1回答

Helenr

我正在使用System.Diagnostics和NLog记录网络跟踪。这导致严重的性能下降。禁用System.Diagnostics解决了我的问题。
打开App,查看更多内容
随时随地看视频慕课网APP