什么';在Biztalk中处理消息的整个过程中,创建/使用ID的最佳方法是什么?

什么';在Biztalk中处理消息的整个过程中,创建/使用ID的最佳方法是什么?,biztalk,biztalk-2010,Biztalk,Biztalk 2010,到目前为止,我们的计划是:我们有一个涉及多个模式、编排和发送/接收消息的流程 我们的愿望是:当我们将进度记录到SQL server表中时,拥有一个将整个过程链接在一起的ID 到目前为止,我们有一个记录进度的表,但当有多条消息时,很难读取,因为Biztalk有时会无序处理某些消息 例如,我们可以: 1 Beginning process for client1 2 Second item for client1 3 Third item for client1 4 Final item for c

到目前为止,我们的计划是:我们有一个涉及多个模式、编排和发送/接收消息的流程

我们的愿望是:当我们将进度记录到SQL server表中时,拥有一个将整个过程链接在一起的ID

到目前为止,我们有一个记录进度的表,但当有多条消息时,很难读取,因为Biztalk有时会无序处理某些消息

例如,我们可以:

1 Beginning process for client1 2 Second item for client1 3 Third item for client1 4 Final item for client1 1开始客户端的进程1 2客户的第二项1 3客户的第三项1 4客户的最后一项1 如果一次只更新一个客户端,则很容易遵循。另一方面,这更有可能:

1 Beginning process for client1 2 Beginning process for client2 3 Second item for client2 4 Third item for client2 5 Second item for client1 6 Third item for client1 7 Final item for client1 8 Final item for client2 1开始客户端的进程1 2客户的开始流程2 3第二项客户服务2 4客户的第三项2 5第二项为客户1 6客户的第三项1 7客户的最后一项1 8客户的最后一项2 最好在整个过程中都有一个ID,这样最后一个列表就可以按这个ID字段排序了

做这件事的最好和/或最快的方法是什么?我们曾想过添加一个ID,我们将创建一个ID,从第一个编排触发的初始时刻开始,并不断将该值传递给所有模式和以后的编排。这似乎需要做很多工作,需要修改所有的模式——这似乎是错误的


我们应该想要这样一个身份证吗?想到其他解决方案了吗?

这可能不是最简单的方法,但您是否考虑过这一点:

基本上,它是一个仪器框架,允许您从管道、地图、ORCH等中输出事件

当您向事件跟踪写入时,您可以使用“业务密钥”,它将多个事件连接在一个链中,类似于您所说的

这里有

这可能不是最简单的方法,但您有没有考虑过这一点:

基本上,它是一个仪器框架,允许您从管道、地图、ORCH等中输出事件

当您向事件跟踪写入时,您可以使用“业务密钥”,它将多个事件连接在一个链中,类似于您所说的

这里有

我不确定我是否完全理解您的特定设置的所有细节,但下面是:

如果可以将来自同一客户端的消息关联到“长时间运行”业务流程(等待来自同一客户端的后续消息),则该业务流程将具有自动分配的ServiceId Guid,该Guid将在整个业务流程中保留

正如您所说,出于关联的目的,您通常会尝试在现有传入消息模式中使用自然键将后续消息关联回正在运行的业务流程-这样您就不需要更改模式。在您的示例中,如果同一个客户端不能同时发送多个消息“集”,那么ClientId可能是一个很好的相关性。(最坏的情况是,如果您向架构添加了新的关联键,则需要更改业务流程中涉及的所有系统,以“记住”此键并将其返回给您。)同样,假设ClientId为关联键,在您的示例中,两个业务流程将同时运行—一个用于客户端1,另一个用于客户端2


但是,出于可伸缩性和版本控制的原因,通常应避免(非常)长时间运行的业务流程,除非它们是绝对必要的(例如,除非您只能在收到所有4条客户端消息后触发流程)。如果您决定将每条消息保留为单独的业务流程,或者只是在端口上映射和过滤,另一种“跟踪”消息集的方法是使用BAM-您可以使用延续将所有客户端消息重新绑定在一起,例如用于报告等目的。

我不确定是否完全理解您特定设置的所有细节,但这里有:

如果可以将来自同一客户端的消息关联到“长时间运行”业务流程(等待来自同一客户端的后续消息),则该业务流程将具有自动分配的ServiceId Guid,该Guid将在整个业务流程中保留

正如您所说,出于关联的目的,您通常会尝试在现有传入消息模式中使用自然键将后续消息关联回正在运行的业务流程-这样您就不需要更改模式。在您的示例中,如果同一个客户端不能同时发送多个消息“集”,那么ClientId可能是一个很好的相关性。(最坏的情况是,如果您向架构添加了新的关联键,则需要更改业务流程中涉及的所有系统,以“记住”此键并将其返回给您。)同样,假设ClientId为关联键,在您的示例中,两个业务流程将同时运行—一个用于客户端1,另一个用于客户端2


但是,出于可伸缩性和版本控制的原因,通常应避免(非常)长时间运行的业务流程,除非它们是绝对必要的(例如,除非您只能在收到所有4条客户端消息后触发流程)。如果您决定将每条消息保留为单独的业务流程,或者只是在端口上映射和过滤,另一种“跟踪”这些消息集的方法是使用BAM—您可以使用一个延续来将所有客户端消息重新绑定在一起,例如用于报告等目的。

查看BAM。它的设计完全符合您的描述:

有一个关于BAM的非常好的章节,由本书的作者之一编写,可以帮助您开发BAM解决方案。最后,一个不错的例子

不要被最初的复杂性所拖累。当你开始思考时,砰的一声,这是BizTalk最酷的功能之一


希望这有帮助。祝你好运。

看看BAM。它被设计来做什么