为啥我的 BizTalk Orchestration 多次从消息框中接收相同的消息

Posted

技术标签:

【中文标题】为啥我的 BizTalk Orchestration 多次从消息框中接收相同的消息【英文标题】:Why is my BizTalk Orchestration is picking up the same message from the Message Box Multiple times为什么我的 BizTalk Orchestration 多次从消息框中接收相同的消息 【发布时间】:2011-08-01 14:31:12 【问题描述】:

我有一个带有直接绑定逻辑端口的业务流程。让我们称之为“O1” O1 订阅消息类型“A”(在接收端口的过滤器属性中指定)

当 O1 收到“A”类型的消息时,它会在完成之前等待一些用户输入。 (这里有一些相关性)

到目前为止一切都很好......

我有第二个编排“O2”,它构造一条“A”类型的消息并将其推送到消息框。

发生这种情况时,我会启动许多 O1 实例。 我能想到的是,只要存在 O1 的实例,消息仍然可以在消息框上供订阅者使用。因此,我将不断创建编排实例。

当编排正在处理消息时,它是否会一直保留在消息框中直到完成?

如果有人能解释发生了什么以及我缺少什么,将不胜感激!

【问题讨论】:

【参考方案1】:

当编排正在处理消息时,它是否会一直保留在消息框中直到完成?

没有。实际上消息在消息框中,但它被标记为活动。所以没有其他进程会使用它。也许 O1 正在构造 A 类型的消息,因此它会重新激活自己。

看看这篇Tips And Tricks的文章:

现在是有趣的部分。 Direct-Bound 端口(尤其是 Message Box 种类)的一个常见缺陷是创建无限循环。想象一个只包含两个形状的简单编排,一个 Activate=True Receive 形状(当然是直接绑定)和一个仅将消息转发到 FILE 端口的 Send 形状。当这个编排发送消息时,它去哪里了?和往常一样,首先到消息框。每当消息到达消息框时,BizTalk 就会搜索任何匹配的订阅。该消息与最初激活编排的消息有何不同?它不会,因此 BizTalk 会很乐意启动您的编排的另一个实例来处理它,依此类推,直到您耗尽内存。

【讨论】:

非常感谢 - 这就是我缺少的链接。懂了才有意义!再次,非常感谢。 为了在两个编排之间以串行方式“重用”消息 A,您需要添加一个额外的过滤器。您可以将某种类型的状态字段添加到您的“A”消息模式并对其进行推广,或者在消息上使用上下文属性 - 例如见blogs.msdn.com/b/dhtoran/archive/2005/07/07/436395.aspx 按照文章的建议,我最终所做的是确保在我的订阅中,我过滤掉了来自我的订阅编排的任何类型 A 的消息。这消除了循环。这解决了问题! 我偶然发现的另一个好方法:blogs.msdn.com/b/kevin_lam/archive/2006/04/25/583490.aspx

以上是关于为啥我的 BizTalk Orchestration 多次从消息框中接收相同的消息的主要内容,如果未能解决你的问题,请参考以下文章

在 BizTalk 中,为啥要同时导入和安装 MSI 文件?

为啥 BizTalk Scope 没有捕获此 MissingPropertyException

PowerShell BizTalk 脚本不使用 PowerShell 的 BizTalk 提供程序

BizTalk 2020 XSLT 3.0 - 样式表编译期间报告错误

BizTalk适配器生成分层架构

BizTalk WCF_SQL 轮询