【问题标题】: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 的实例,消息仍然可以在消息框上供订阅者使用。因此,我将不断创建编排实例。

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

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

【问题讨论】:

    标签: binding biztalk orchestration


    【解决方案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
    猜你喜欢
    • 2017-10-05
    • 2017-01-20
    • 2020-08-22
    • 2010-10-30
    • 2017-11-10
    • 2017-02-05
    • 2018-05-07
    • 2017-08-09
    相关资源
    最近更新 更多