Biztalk - Как ограничить поток дизассемблирования конвейера

Мне нужно ограничить количество экземпляров оркестровки, порожденных при дебатировании большого сообщения в потоковом конвейере приема дизассемблирования. Допустим, у меня есть большой XML-файл, содержащий 100 000 отдельных сообщений «Заказ». Конвейер приема затем дебатирует его и создает 100 000 оркестровок «ProcessOrder». Это слишком много, и мне нужно это ограничить.

Требования

  1. Отладка должна выполняться в потоковом режиме, чтобы я загружал в память только одно сообщение «Заказ» за раз, прежде чем отправлять его в ящик сообщений;
  2. Отладку необходимо регулировать в зависимости от количества текущих запущенных экземпляров оркестровки «ProcessOrder» (скажем, если у меня уже есть 100 запущенных экземпляров, отладка будет ждать, пока один из них не закончится, чтобы отправить еще одно сообщение «Заказ» в окно сообщений).

Где я нахожусь

  1. У меня есть конвейер приема, который выполняет дебатирование и функциональные модификации моих сообщений. Он делает то, что должен, в потоковом режиме и помещает отдельные сообщения в VirtualStreams;

  2. У меня есть оркестровка и вспомогательные методы, которые могут ограничивать количество экземпляров оркестрации ProcessOrder.

Эта проблема

Я знаю, что могу запустить конвейер приема внутри оркестровки (и это решило бы мою проблему, поскольку при каждом вызове «getnext» конвейера я мог просто удерживать, если запущено слишком много экземпляров оркестрации) но , копаясь в dll biztalk, я заметил, что использование Microsoft.XLANGs.Pipeline.XLANGPipelineManager по-прежнему загружает все сообщения в память, а не перечисляет их, как это делает Microsoft.BizTalk.PipelineOM.PipelineManager. Я знаю, что они помещают все сообщения в VirtualStream, но этого все еще недостаточно с точки зрения памяти для такого большого количества сообщений.

Вопрос

Моим следующим шагом было бы запустить конвейер приема непосредственно в порту приема (чтобы он использовал Microsoft.BizTalk.PipelineOM.PipelineManager) без согласования, ограничивающего количество экземпляров «ProcessOrder», но для удовлетворения требований я бы нужно добавить логику задержки в мой конвейер. Это жизнеспособный вариант? Если нет, то почему? и какая еще у меня есть альтернатива?


person ChG    schedule 06.04.2015    source источник


Ответы (1)


Вы должны один раз деблокировать все сообщения из конвейера и сохранить эти отдельные сообщения в MSMQ еще до того, как они будут обработаны оркестровкой. Используйте стандартный конвейер для диспетчеризации сообщений, поскольку они эффективны для обработки диспетчеризации больших файлов. MSMQ доступен бесплатно через Turn On Windows Features. Использовать MSMQ очень просто и не требует разработки. Отправка в MSMQ будет очень быстрой. 100 КБ сообщений вообще не проблема.

Тогда имейте место получения для чтения из MSMQ. В зависимости от пропускной способности оркестрации вы можете управлять потоком сообщений, используя регулирование узла приема BizTalk, или получая сообщения от MSMQ по порядку, или используя их комбинацию. Убедитесь, что у вас есть отдельный экземпляр хоста для получения и отправки MSMQ, а также для обработки оркестровки.

Это будет выполняться во всех конфигурациях без какого-либо дополнительного кода, упрощающего ваш дизайн. Убедитесь, что у вас есть оркестровка с минимальным количеством постоянных точек.

person Vikas Bhardwaj    schedule 06.04.2015
comment
Ваш ответ правильный, и я приму его, если больше не будет предложений. К сожалению, в моем случае я не могу использовать MSMQ (организация, в которой я работаю, этого не позволяет). - person ChG; 08.04.2015
comment
В качестве альтернативы вы можете хранить дебатированные сообщения на SQL-сервере, однако в зависимости от объема, необходимого для вашего хранилища, могут возникнуть проблемы. Или если ваша организация использует другую систему очередей, например IBM MQ и т. Д. Но это лучшие варианты, которые у вас есть. Манипулирование им в коде BizTalk не будет надежным в будущем и может привести к некоторым проблемам в будущем. - person Vikas Bhardwaj; 08.04.2015