Biztalk 是否取消对传入消息的分组,并在编排中创建固定批次的输入消息?

Biztalk 是否取消对传入消息的分组,并在编排中创建固定批次的输入消息?,biztalk,Biztalk,我关注上面的文章,但我想在编排中实现这一点 我如何实现这一点请建议,以下是我知道的一些想法 使用foreach循环 a) 阅读每一条信息并添加到 新消息,直到它到达 固定批次 b) 使用xpath position/[local-name()='Root'和 命名空间-uri()='http://mycompany.com']/[local-name()='content' 名称空间-uri()=''和位置()>=0和位置

我关注上面的文章,但我想在编排中实现这一点

我如何实现这一点请建议,以下是我知道的一些想法

  • 使用foreach循环
    a) 阅读每一条信息并添加到 新消息,直到它到达 固定批次
    b) 使用xpath position/[local-name()='Root'和 命名空间-uri()='http://mycompany.com']/[local-name()='content' 名称空间-uri()=''和位置()>=0和位置<固定大小](不起作用)

  • 调用自定义管道组件(如上所述)


  • 首先感谢guyz的宝贵回复

    现在,我在编排中使用foreach循环、xpath(togetcount和singleinput节点)和Message变量(创建新的无界消息以分配连接的固定数量的输入消息)实现了这一点。它现在运转良好


    您是否同意这种方法,或者您有任何顾虑?

    最好的解决方案确实是使用自定义管道组件,如您问题中链接到的组件。这样做的好处在于,您可以从业务流程中调用管道,而无需将其绑定到特定的接收位置:


    请注意,您提到的示例组件没有使用流技术;这意味着它会将原始消息的全部内容加载到内存中。如果您打算处理可能较大的消息,这可能是一个问题(这通常是使用debatching的原因)。

    最好的解决方案确实是使用自定义管道组件,如问题中链接到的组件。这样做的好处在于,您可以从业务流程中调用管道,而无需将其绑定到特定的接收位置:


    请注意,您提到的示例组件没有使用流技术;这意味着它会将原始消息的全部内容加载到内存中。如果您打算处理潜在的大消息(这通常是使用Debatch的原因),这可能是一个问题。

    实现高吞吐量(大消息和/或大量消息)的一个简单方法是通过使用自定义XSLT的接收端口中的映射来运行传入消息。然后,这个映射将XML分组到适当大小的组中——映射之后,XML可能看起来像这样

    <ns0:sample xmlns:ns0='http://MGSIBREDemo.LoanRequest' xmlns:ns1='http://MGSIBREDemo.LoanRequestGroup'>
     <ns1:group>
      <data1><name>name1</name></data1>
      <data1><name>name2</name></data1>
      <data1><name>name3</name></data1>
      <data1><name>name4</name></data1>
     </ns1:group>
     <ns1:group>
      <data1><name>name5</name></data1>
      <data1><name>name6</name></data1>
      <data1><name>name7</name></data1>
      <data1><name>name8</name></data1>
     </ns1:group>
     <ns1:group>
      <data1><name>name9</name></data1>
      <data1><name>name10</name></data1>
     </ns1:group>
    </ns0:sample>
    
    
    名称1
    姓名2
    名字3
    名字4
    名字5
    名字6
    姓名7
    姓名8
    名字9
    名字10
    
    在这第一步之后,您必须将消息从BizTalk发送出去,然后再接收回来。然后,您可以使用普通的XML dissasebler管道组件来解除消息的争用(例如所述)

    这种技术的最大优点是,您将在端口中使用BizTalk映射来转换消息和现成的管道组件。这两种方式都以流式方式处理消息,您将能够处理大消息和大量消息

    然而,缺点是,当您将消息写入磁盘或队列,然后将其读回时,它会降低性能

    如果可以使用XML汇编器在发送端进行解包,那就太好了,但这在今天是不可能的


    因此,除非您能够将所有消息读取到内存中(使用XmlDocument),或者花时间编写自己的流式Xml解释器,否则这就是我们所遇到的“黑客”

    实现高吞吐量(大消息和/或大量消息)的一种简单方法是通过使用自定义XSLT的接收端口中的映射来运行传入消息。然后,这个映射将XML分组到适当大小的组中——映射之后,XML可能看起来像这样

    <ns0:sample xmlns:ns0='http://MGSIBREDemo.LoanRequest' xmlns:ns1='http://MGSIBREDemo.LoanRequestGroup'>
     <ns1:group>
      <data1><name>name1</name></data1>
      <data1><name>name2</name></data1>
      <data1><name>name3</name></data1>
      <data1><name>name4</name></data1>
     </ns1:group>
     <ns1:group>
      <data1><name>name5</name></data1>
      <data1><name>name6</name></data1>
      <data1><name>name7</name></data1>
      <data1><name>name8</name></data1>
     </ns1:group>
     <ns1:group>
      <data1><name>name9</name></data1>
      <data1><name>name10</name></data1>
     </ns1:group>
    </ns0:sample>
    
    
    名称1
    姓名2
    名字3
    名字4
    名字5
    名字6
    姓名7
    姓名8
    名字9
    名字10
    
    在这第一步之后,您必须将消息从BizTalk发送出去,然后再接收回来。然后,您可以使用普通的XML dissasebler管道组件来解除消息的争用(例如所述)

    这种技术的最大优点是,您将在端口中使用BizTalk映射来转换消息和现成的管道组件。这两种方式都以流式方式处理消息,您将能够处理大消息和大量消息

    然而,缺点是,当您将消息写入磁盘或队列,然后将其读回时,它会降低性能

    如果可以使用XML汇编器在发送端进行解包,那就太好了,但这在今天是不可能的


    因此,除非您能够将所有消息读取到内存中(使用XmlDocument),或者花时间编写自己的流式Xml解释器,否则这就是我们所遇到的“黑客”

    如果您需要更多关于如何转换示例组件以利用流技术的指导,请告诉我。对于一个技术解释,从这里开始:Maxime,我正在尝试创建一个类似于此的自定义管道(除了它拆分平面文件而不是xml)。你能告诉我更多关于基于流的解决方案吗?thx:)请通过我博客的about页面与我联系。如果您需要更多关于如何转换示例组件以利用流技术的指导,请告诉我。对于一个技术解释,从这里开始:Maxime,我正在尝试创建一个类似于此的自定义管道(除了它拆分平面文件而不是xml)。你能告诉我更多关于基于流的解决方案吗?thx:)请通过我的博客“关于”页面与我联系。这也是一种非常有效的技术。谢谢分享。这也是一个非常有效的技巧。感谢您的共享。那么您想获取已批处理的邮件,将其解组,并将其重新匹配到不同的批大小?那么您想获取已批处理的邮件,将其解组,并将其重新匹配到d