Какие варианты у меня есть для межпроцессного взаимодействия служб SSIS?
Я хотел бы хранить целочисленную переменную, которая увеличивается и уменьшается (семафор подсчета для ограничения одновременных запросов к внешнему API). Это было бы легко, за исключением того, что мне нужен способ чтения / записи этой переменной из пакета служб SSIS, который выполняется в параллельных заданиях агента SQL. В настоящий момент может быть от 0 до 5 экземпляров задания агента SQL и, следовательно, пакет служб SSIS, запущенный одновременно.
Какие есть варианты для чтения и записи этой переменной? Код, который будет использовать эту переменную, написан как пользовательская задача служб SSIS в.NET.
Не особенно важно, чтобы значение было точно правильным, если оно в общем близко, я в пределах допустимого диапазона. Точное было бы здорово, но не обязательно.
У меня есть доступ к файловой системе, реестру, базе данных, серверу и агенту SSIS в целом, но я хотел бы очень часто проверять эту переменную с помощью 15-30 потоков, что исторически вызывало проблемы с использованием метода файловой системы (Я, вероятно, делаю это неправильно), и IMO слишком интенсивно, чтобы хранить в базе данных. Поправьте меня если я ошибаюсь. Хранение в реестре предотвращает доступ к переменной через ферму серверов.
Если есть кто-нибудь, кто может помочь, я с радостью буду вашим заслуженным слугой.
2 ответа
Если он используется как счетчик семафоров, почему бы на самом деле не использовать объект семафора Windows? System.Threading.Semaphore - это версия.NET, и если вы укажете имя семафора в конструкторе, объект Win32 будет разделен между всеми процессами, использующими это имя.
Не уверен, что я понимаю вопрос - вы указали, что имеете доступ к базе данных, файловой системе, реестру и т. Д. Вы говорите, что не хотите / не можете использовать эти методы? Вы хотите сохранить значение, чтобы в случае остановки компьютера вы могли восстановить его?
Если сохранение не требуется, вы можете сохранить в памяти через RPC, включая COM или веб-сервисы. Каким бы ни было решение, оно должно быть глобальным и видимым для всех работающих экземпляров.
Используются ли эти переменные метаданные в качестве семафора для управления и координации процессов, или это данные переменной области?