Мне нужно ограничить количество экземпляров оркестровки, порожденных при дебатировании большого сообщения в потоковом конвейере приема дизассемблирования. Допустим, у меня есть большой XML-файл, содержащий 100 000 отдельных сообщений «Заказ». Конвейер приема затем дебатирует его и создает 100 000 оркестровок «ProcessOrder». Это слишком много, и мне нужно это ограничить.
Требования
- Отладка должна выполняться в потоковом режиме, чтобы я загружал в память только одно сообщение «Заказ» за раз, прежде чем отправлять его в ящик сообщений;
- Отладку необходимо регулировать в зависимости от количества текущих запущенных экземпляров оркестровки «ProcessOrder» (скажем, если у меня уже есть 100 запущенных экземпляров, отладка будет ждать, пока один из них не закончится, чтобы отправить еще одно сообщение «Заказ» в окно сообщений).
Где я нахожусь
У меня есть конвейер приема, который выполняет дебатирование и функциональные модификации моих сообщений. Он делает то, что должен, в потоковом режиме и помещает отдельные сообщения в VirtualStreams;
У меня есть оркестровка и вспомогательные методы, которые могут ограничивать количество экземпляров оркестрации ProcessOrder.
Эта проблема
Я знаю, что могу запустить конвейер приема внутри оркестровки (и это решило бы мою проблему, поскольку при каждом вызове «getnext» конвейера я мог просто удерживать, если запущено слишком много экземпляров оркестрации) но strong>, копаясь в dll biztalk, я заметил, что использование Microsoft.XLANGs.Pipeline.XLANGPipelineManager по-прежнему загружает все сообщения в память, а не перечисляет их, как это делает Microsoft.BizTalk.PipelineOM.PipelineManager. Я знаю, что они помещают все сообщения в VirtualStream, но этого все еще недостаточно с точки зрения памяти для такого большого количества сообщений.
Вопрос
Моим следующим шагом было бы запустить конвейер приема непосредственно в порту приема (чтобы он использовал Microsoft.BizTalk.PipelineOM.PipelineManager) без согласования, ограничивающего количество экземпляров «ProcessOrder», но для удовлетворения требований я бы нужно добавить логику задержки в мой конвейер. Это жизнеспособный вариант? Если нет, то почему? и какая еще у меня есть альтернатива?