我正在使用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秒后)。
Helenr
相关分类