【问题标题】:Routing/filtering messages without orchestrations无需编排即可路由/过滤消息
【发布时间】:2012-06-26 15:49:14
【问题描述】:

我们的许多 Biztalk 用例都涉及简单地将 HL7 2.x 消息从一个系统映射和路由到另一个系统。实现映射并将它们与发送/接收端口相关联通常很简单,但我们还需要在发送端进行一些基于内容的过滤。

例如,如果发送设施是任意 200 个设施(我们组织中可能有 1000 个设施),我们可能只想向系统 X 发送 ADT A04 和 ADT A08 消息,但系统 Y 需要 ADT A04, A05、A8 用于一组完全不同的设施,仅适用于肾病患者。

因为我们只是在这里路由消息而不是真正管理业务流程,所以在这里使用编排来调用业务规则引擎有点过头了,特别是考虑到我们可能需要一个单独的编排每个 ADT 类型都取决于模式的工作方式。是否可以在不使用编排的情况下实现这样的过滤规则?发送端口的过滤器功能对于我们的需要来说看起来有点过于初级,但同时我宁愿不开发和管理编排。

【问题讨论】:

  • 我目前没有安装 BizTalk,但我相信您可以在没有业务流程的情况下做您想做的事情,只需使用发送端口过滤。如果需要(自定义管道代码,但不是太难),您可以(我相信,已经有一段时间了)从接收端口调用 bre 来获得正确的提升属性。
  • 这篇博文描述了一个有点类似的场景。它使用自定义管道组件调用 BRE 并提升属性以指示目标订阅者:blogs.msdn.com/b/paolos/archive/2011/06/01/…
  • 或者您可以使用预卷的自定义管道组件。 brepipelineframework.codeplex.com

标签: biztalk biztalk-2010


【解决方案1】:

您也许可以使用属性架构来做到这一点...

您需要创建一个属性架构并包含要用于路由的属性(来自其他架构)。部署架构后,这些属性将可用作发送端口中的过滤器。从here开始,你应该可以在某处找到例子……

【讨论】:

  • 您是对的,但我发现如果您要处理大量过滤器,则发送端口中的过滤器功能非常笨拙。此外,如果您有一个复杂的过滤器“((这个和这个)或(这个和这个))和这个),据我所知,您无法通过发送端口过滤器定义那种类型的逻辑。
  • 我们就是这样做的。不过,我们没有非常复杂的过滤器。
  • 不理想,但可以通过在早期处理中为消息分配更高级别的属性来实现复杂的过滤器。例如,您可以使用 BRE 接收管道分配 IsActiveFinanceProcessor 属性,而不是 ((IsManager And IsFinance) 或 (IsAdmin and IsHR)) And IsActive。
【解决方案2】:

正如其他人建议的那样,您可以使用自定义管道组件来调用业务规则引擎。

与其尝试创建自己的,不如说已经有一个开源的可用,称为BizTalk Business Rules Engine Pipeline Framework

通过从管道调用 BRE,您可以创建复杂的规则,然后设置简单的上下文属性,您可以在这些属性上路由您的消息。

完全披露:当我们都在同一家公司时,我曾与该框架的作者合作过。

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 2021-10-09
    • 2017-05-07
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    相关资源
    最近更新 更多