Маршрутизация/фильтрация сообщений без согласования

Многие из наших вариантов использования Biztalk включают простое сопоставление и маршрутизацию сообщений HL7 2.x из одной системы в другую. Внедрение карт и связывание их с портами отправки/получения, как правило, несложно, но нам также необходимо выполнить некоторую фильтрацию контента на стороне отправки.

Например, мы можем захотеть отправлять сообщения ADT A04 и ADT A08 в систему X только в том случае, если отправляющим средством являются какие-либо 200 устройств (из возможных 1000 устройств, которые есть в нашей организации), но системе Y нужны ADT A04, A05, A8. для совершенно другого набора средств и только для почечных больных.

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


person Jeremy    schedule 26.06.2012    source источник
comment
В данный момент у меня не установлен BizTalk, но я уверен, что вы можете делать то, что хотите, без оркестровки, просто используя фильтрацию портов отправки. Вы можете (я полагаю, это было давно) вызвать bre из принимающего порта, если это необходимо (пользовательский код конвейера, но не слишком сложный), чтобы получить нужные продвигаемые свойства на место.   -  person David Hall    schedule 26.06.2012
comment
Этот пост в блоге описывает несколько похожий сценарий. Он использует настраиваемый компонент конвейера, который вызывает BRE и продвигает свойства для указания целевых подписчиков: blogs.msdn.com/b/paolos/archive/2011/06/01/   -  person Ian Gilroy    schedule 26.06.2012
comment
Или вы можете использовать предварительно свернутый пользовательский компонент конвейера. brepipelineframework.codeplex.com   -  person Dijkgraaf    schedule 22.07.2016


Ответы (2)


Возможно, вы сможете сделать это с помощью схем свойств...

Вам необходимо создать схему свойств и включить свойства (из других схем), которые вы хотите использовать для маршрутизации. После развертывания схемы эти свойства будут доступны для использования в качестве фильтра в порту отправки. Начните с здесь, вы сможете где-то найти примеры...

person Fabio    schedule 28.06.2012
comment
Вы правы, но я обнаружил, что функциональность фильтра в порту отправки очень неуклюжа, если вы имеете дело с большим количеством фильтров. Кроме того, если вы имели в виду сложный фильтр ((это и это) или (это и это)) и это), вы не можете определить этот тип логики через фильтр порта отправки, насколько мне известно. - person Jeremy; 28.06.2012
comment
Вот как мы это делаем. У нас нет очень сложных фильтров. - person Jay; 11.07.2012
comment
Не идеальные, но сложные фильтры можно получить, назначив сообщению свойства более высокого уровня в более ранней обработке. Например, вместо ((IsManager And IsFinance) или (IsAdmin и IsHR)) и IsActive вы можете назначить свойство IsActiveFinanceProcessor, используя, скажем, конвейер получения BRE. - person Matt Mitchell; 23.05.2014

Как и другие, вы можете использовать настраиваемый компонент конвейера для вызова механизма бизнес-правил.

И вместо того, чтобы пытаться создать свой собственный, уже существует открытый исходный код, который называется BizTalk Business Rules Engine Pipeline Framework

Вызывая BRE из конвейера, вы можете создавать сложные правила, которые затем устанавливают простые свойства контекста, по которым вы можете маршрутизировать свои сообщения.

Полное раскрытие: я работал с автором этой структуры, когда мы оба работали в одной компании.

person Dijkgraaf    schedule 22.07.2016