Я сейчас нахожусь в процессе создания приложения, которое получает тысячи маленьких сообщений через базовый веб-сервис, сообщения публикуются в очереди сообщений (RabbitMQ).Приложение использует Dependancy Injection, используя StructureMap в качестве своего контейнера.
У меня есть отдельное рабочее приложение, которое использует очередь сообщений и сохраняет сообщения в базе данных (SQL Server).
У меня естьреализовал соединения SQL Connection и RabbitMQ как синглтоны (Thread Local).
В идеальном мире все это работает нормально, но если соединение с SQL Server или RabbitMQ разорвано, мне нужно открыть его заново или потенциально удалить и восстановить /переподключите ресурсы.
Я написал базовый класс, который будет действовать как фабрика, которая перед возвратом ресурса проверяет, подключен ли он / открыт / работает, а если нет, утилизирует и воссоздает его - я не уверенесли это «лучшая практика» или я пытаюсь решить проблему, которая уже была решена.
Может кто-нибудь предложить предложения о том, как я могу реализовать долгосрочные задачи, которые выполняют много небольших задач (вв моем случае один оператор INSERT), который не требует создания объекта для каждой задачи, но можетбыстро восстанавливаться после ошибок, таких как потерянные соединения?
Соединения RabbitMQ кажутся дорогими, и во время высоких рабочих нагрузок у меня могут быстро не хватать дескрипторы, поэтому я хотел бы повторно использовать то же соединение (для потока).