Biztalk有序传递失败

Biztalk有序传递失败,biztalk,ordered-delivery,Biztalk,Ordered Delivery,我们有一个BizTalk应用程序,其中输入消息的顺序非常重要,必须保持,这意味着它们必须以相同的顺序输出。在这里,按正常顺序交货就行了 然而,我了解到,只有当您将接收位置直接连接到发送端口时,才能保证有序交付。从您使用业务流程的那一刻起,订单交付就不再得到保证。有办法解决这个问题吗?因为这样会破坏我们的整个应用程序,我们已经为此工作了几个月 我阅读了微软的一篇文章,其中他们使用了一个带有计数器的额外字段,并使用了一个检查计数器的结束编排。但这对我们来说是太多的工作了。所以这项工作是不可能的。另外

我们有一个BizTalk应用程序,其中输入消息的顺序非常重要,必须保持,这意味着它们必须以相同的顺序输出。在这里,按正常顺序交货就行了

然而,我了解到,只有当您将接收位置直接连接到发送端口时,才能保证有序交付。从您使用业务流程的那一刻起,订单交付就不再得到保证。有办法解决这个问题吗?因为这样会破坏我们的整个应用程序,我们已经为此工作了几个月

我阅读了微软的一篇文章,其中他们使用了一个带有计数器的额外字段,并使用了一个检查计数器的结束编排。但这对我们来说是太多的工作了。所以这项工作是不可能的。另外,不是所有的消息都被翻译,这在我们的流程中造成了漏洞,也不是所有的消息都来自同一个来源,这使得这项工作毫无用处

还有其他想法吗?

查看页面。 它解释说,如果您有一个遵循单例模式的业务流程,以确保该业务流程只存在一个实例,并且您确保将业务流程的接收端口设置为有序传递,那么您应该获得有效的端到端有序传递场景

要提供端到端订单交付,必须满足以下条件:

必须使用适配器接收消息,该适配器在将消息提交到BizTalk Server时保留消息的顺序。在BizTalk Server 2006中,此类适配器的示例有MSMQ、MQSeries和MSMQT。此外,HTTP或SOAP适配器可用于按顺序提交消息,但在这种情况下,HTTP或SOAP客户端需要通过一次提交一条消息来强制执行该顺序

您必须使用将Ordered Delivery选项设置为True的发送端口订阅这些邮件

如果业务流程用于处理消息,则只应使用业务流程的单个实例,业务流程应配置为使用顺序护送,并且业务流程接收端口的Ordered Delivery属性应设置为True


BizTalk中有序传递的重新排序策略:

我最近回复了一位LinkedIn用户关于BizTalk中订购交付选项的回复

我认为让人们了解使用BizTalk对消息重新排序的一些策略会很有用

通常,作为BizTalk开发人员,您需要集成到不可更改的业务线系统。这可能是由于一个或多个不同的原因。例如,更改系统的成本可能过高,或者供应商许可证声明,如果系统发生更改,支持可能会被撤销

如果供应商提供了经过深思熟虑设计的API作为集成点端点,这通常不会出现问题。然而,正如许多集成开发人员很快了解到的,这种情况很少发生

我所说的精心设计的API是什么意思?好的,除了所有SODA主体(服务组合、故障契约等),API最重要的特性是支持以错误顺序到达的数据的使用

这是一件相当简单的事情。例如,如果您是一家供应商,并且提供了一个HTTP操作作为集成点,那么您可以在操作中公开的字段之一是时间戳,或者更好的是序列号。这意味着,如果使用过期的有效负载进行调用,则相关的补偿机制可以启动-这可以像丢弃数据一样简单

本文讨论了当供应商没有将此功能构建到API中时,作为一个集成商,您必须实现端到端的有序交付,作为集成解决方案的一部分

正如我在LinkedIn上给用户的帖子(见上面的链接)中所述,在BizTalk中,除了最简单的场景外,任何场景中的订单交付都是复杂的,最坏的情况下,在开发和支持方面都会增加复杂度,带来巨大的成本。基本原因是BizTalk被设计为大规模并发以实现高吞吐量,而并发和排序之间存在着直接且不可避免的冲突。Shoe horning E2E有序交付到BizTalk解决方案依赖于人工制品,如单例编排,这会引入复杂性并增加故障率和每故障数的成本

更好的解决方案是将并发处理保持在尽可能靠近业务线系统端点的位置,然后在每个端点周围实现所谓的重新排序器包装器,这些端点要求以正确的顺序传递数据

如何在BizTalk中实现这样的包装器取决于下表中列出的一些因素:

|Sequencing    |Messages|Database    |Wrapper                           |
|field         |are     |integration?|strategy                          |
|              |deltas? |            |                                  |
|--------------|--------|------------|----------------------------------|
|n of a total m| N      | Y          |Stored procedure                  |
|n of a total m| N      | N          |Singleton orchestration           |
|n of a total m| Y      | Y          |Batched singleton orchestration   |
|n of a total m| Y      | N          |Batched singleton orchestration   |
|Timestamp     | N      | Y          |Stored procedure                  |
|Timestamp     | N      | N          |Singleton orchestration           |
|Timestamp     | Y      | Y          |Buffer table with staggered reader|
|Timestamp     | Y      | N          |Buffer table with staggered reader|
第一个因素排序字段涉及这样一种思想,即为了实现任何类型的重新排序器包装器,您至少需要消息数据包含一些排序信息。这可以采取源时间戳的形式;然而,一种更好但更罕见的排序信息由一个序列号和消息总数组成,例如,消息1/10、消息2/10等

第二个因素是三角洲?与消息的有效负载是否包含数据的单个状态更改或过去所有数据更改的总和相关。换句话说,是否可以从此消息重建数据的完整当前状态?如果消息负载仅包含一个更改,则可能无法从单个消息重构数据的状态,在本例中,您的消息是一个增量

第三个因素是数据库集成?与系统的集成入口点是否为da相关