В настоящее время я пытаюсь использовать SignalR и RabbitMQ для циклического перебора / балансировки нагрузки json запросов веб-службы, и у меня возникают проблемы с использованием памяти одним из приложений, когда оно обрабатывает большие объемы (~ 300 - 2500 кб ) Сообщения.
У меня есть сервер IIS, на котором размещено веб-приложение (с именем «Backend»), которому необходимо запросить другое веб-приложение (имя «Pricing»), также размещенное на сервере IIS. Чтобы поддерживать соединение с моим сервером RabbitMQ, я разработал консольное приложение, которое подключено к Backend и Princing с помощью SignalR.
Поэтому, когда Backend необходимо запросить Princing, он просит свою консоль опубликовать sh сообщение в очереди и консоль, подключенная к Pricing, принимает сообщение и передает его Pricing (с помощью метода Invoke <>). Когда Pricing завершил свою работу, он просит консоль опубликовать sh ответное сообщение, а консоль, подключенная к Backend, принимает его и передает Backend.
Подводя итог: [Backend] -> [Console] -> [RabbitMQ] <- [Console] <- [Pricing] </p>
И у меня есть 2 Pricing, получающие сообщения из их консоли от очередь RabbitMQ.
Эта установка заменяет традиционный запрос веб-службы между двумя IIS и использует преимущества RabbitMQ (балансировщик нагрузки и асинхронный вызов в архитектуре микро / веб-служб)
Я добавил
GlobalHost.Configuration.MaxIncomingWebSocketMessageSize = null;
в Startup.cs в обоих IIS, чтобы принимать большие сообщения.
Когда я смотрю на потребление памяти Ценообразованием в Windows Диспетчере задач, он быстро растет от 500 МБ до 1500 МБ (через 5 минут, работая с бесконечными запросами от Backend для проверки настроек).
Я попробовал что-то еще, записав содержимое запросов в файлы в общей папке и просто опубликовав имя файла в сообщениях RabbitMQ и использование памяти Pricing (с изменением кода для загрузки файла) не перемещается и остается около 500 МБ.
Это связано с длиной сообщения, которое моя консоль передает в IIS.
Я пытался отключить консоль от концентраторов IIS, потому что думал, что она, возможно, освободит память, но нет.
Кто-нибудь сталкивался с проблемой потребления памяти большими сообщениями в хабах? Как я могу проверить, действительно ли в моем приложении есть утечка памяти?
Как насчет использования SignalR и RabbitMQ в среде веб / микро сервисов? Любой отзыв?
Большое спасибо,
Жан-Франсуа
.NETFramework : 4.5
Microsoft.AspNet.SignalR : 2.4.1