После размещения приложения на IIS или AKS linux pod, когда мы устанавливаем соединение с определенным хабом SignalR, мы замечаем, что его память автоматически увеличивается после выполнения той же операции, например, при обращении к списку пользователей. Если мы выполняем одну и ту же операцию несколько раз, то каждый раз видим увеличение памяти. После установки соединения с сигнальными хабами мы также используем Rebus для оставшейся связи.
private static BuiltinHandlerActivator _adapter = new BuiltinHandlerActivator();
private readonly ILog _logger = LogManager.GetLogger(typeof(RebusWeb<THub>));
public RebusWeb(IHubContext<THub> hub)
{
try
{
var configuration = new ConfigurationBuilder().AddJsonFile($"appsettings.json");
var config = configuration.Build();
RebusConfigSettings.AppSettingsConfigure(config);
_adapter.Register(() => new HubHandler<THub>(hub));
var configurer = Configure.With(_adapter)
.Options(o =>
{
o.SetNumberOfWorkers(RebusConfigSettings.Workers);
o.RetryStrategy(maxDeliveryAttempts: RebusConfigSettings.RetryAttempts);
})
.Logging(l => l.Log4Net())
.Serialization(s => s.UseNewtonsoftJson(JsonInteroperabilityMode.PureJson))
.Routing(r =>
{
var routing = r.TypeBased();
var routers = config.GetSection("AppRouting").Get<List<AppRouting>>();
//routers.ForEach(sub => routing.Map(sub.Message.GetType(), sub.Endpoint));
foreach (var router in routers)
{
if (router.Message.Contains(","))
{
var message = Type.GetType(router.Message);
routing.Map(message, router.Endpoint);
}
else
{
var assembly = Assembly.Load(router.Message);
var types = assembly.GetTypes();
foreach (var type in types)
{
if (type.IsSubclassOf(typeof(MessageModel)))
{
routing.Map(type, router.Endpoint);
}
}
}
}
})
.Events(x =>
{
x.BeforeMessageSent += (bus, headers, message, context) =>
{
if (RebusConfigSettings.TimeToBeReceived != "-1")
{
headers.Add(Headers.TimeToBeReceived, RebusConfigSettings.TimeToBeReceived);
headers.Add(Headers.Express, "rebus-express");
}
};
});
string azureServiceBusUrl = EnvironmentVariablesManager.GetEnvironmentVariable("AzureServiceBusUrl");
if (!string.IsNullOrWhiteSpace(azureServiceBusUrl))
{
var enableCompression = EnvironmentVariablesManager.GetEnvironmentVariable("EnableMessageCompression");
if (!string.IsNullOrEmpty(enableCompression) && string.Compare(enableCompression, "true", StringComparison.OrdinalIgnoreCase) == 0)
configurer = configurer.Options(o => o.EnableCompression(RebusConfigSettings.MessageCompressionSize));
configurer.Transport(t => t.UseAzureServiceBus(azureServiceBusUrl, RebusConfigSettings.InputQueue).AutomaticallyRenewPeekLock()).Start();
}
}
catch (Exception ex)
{
_logger.Error(ex);
}
Митофан
Вопрос задан23 мая 2024 г.