BizTalk - 传递通知上的路由失败

Posted

技术标签:

【中文标题】BizTalk - 传递通知上的路由失败【英文标题】:BizTalk - Routing failure on a delivery notification 【发布时间】:2012-11-11 21:41:56 【问题描述】:

我最近在删除通知方面遇到了一个非常奇怪的问题。这是场景:

我有一个编排,它将消息发送到配置为传递通知 = 已传输的单向发送端口(顺便说一下,发送端口使用 FTP 适配器,但我认为适配器是什么并不重要)。

当出现消息传递错误时,该错误被编排捕获(因此意味着传递通知机制按预期工作),编排执行一些日志记录,然后以编程方式终止(终止形状)。消息传递实例仍然存在并且处于挂起和可恢复状态。

在解决了导致消息传递错误的问题后,我恢复了暂停的消息传递实例。

此时我得到 2 个非常可疑的消息传递实例:ACK 的路由失败并且消息传递实例仍然处于活动状态(但什么也不做......)。我确信路由失败实例是与活动消息传递实例相关的传递通知,因为它们具有相同的 CorrelationToken。 更多细节:如果我终止活动实例,它会被挂起(不可恢复),并且错误消息说实例已完成而没有消耗其所有消息!

最后但同样重要的是,我只在某些环境中遇到这个问题...

更新:问题似乎出现在运行 BizTalk 2006 R2 SP1 的 BizTalk 盒子上。在没有 SP1 的情况下运行 BizTalk 2006 R2 的机器上从未出现过这种情况。我会尽快确认的

更新 2:看来我在上次更新中是对的:安装 SP1 CU1 后出现问题...所以下一步:我将尝试查找以下 CU 之一是否更正问题。

【问题讨论】:

标签不应添加到标题中。 关于暂停的不可恢复消息 - google“僵尸消息” 感谢您的回答!是的,我已经在这个方向上寻找了一段时间。但是只有当我手动终止活动的消息传递实例时才会出现僵尸消息,所以我认为这只是一个副作用。我正在研究一个新的方向:似乎所有有问题的机器都运行 BizTalk 2006 R2 SP1,而其他机器只运行没有 SP1 的 BTS 2006 R2。 请使用解决方案添加并回答您的问题,对于遇到相同问题的其他人来说会更容易。非常感谢! 【参考方案1】:

实际上没有 CU 可以纠正所描述的问题。但还有更多:似乎所有较新的 BizTalk 版本都受到关注:我已经在 BizTalk 2009 和所有 CU 上进行了测试,在 BizTalk 2010 上和所有 CU 上进行了测试,问题仍然存在!!!

我找到的唯一解决方案是创建一个订阅所有交付通知的编排......不是很干净,但它可以完成工作 - 至少大部分都很好。

事实上,当您使用 delivery notifications 为失败的消息启用路由 时,我发现了另外 1 个问题:AckRequired 属性和相关令牌被复制到路由失败消息,这意味着如果此失败消息被发送端口(例如:ESB 异常发送端口)使用,则将发布 ACK,并且如果该 ACK 仍在执行,则可以将其路由到原始编排。如果是这样,那将以经典的僵尸消息情况结束,因为编排不会使用此 ACK! 现在,尝试向您的客户解释您的开发人员不应受到责备......:p

【讨论】:

以上是关于BizTalk - 传递通知上的路由失败的主要内容,如果未能解决你的问题,请参考以下文章

BizTalk 2016 管理员因强制 tls1.1+ 而失败

Azure 通知中心推送通知失败或传递无效或不完整的数据

适配器减慢 BizTalk

通过 BizTalk 编排调用 .Net 类的错误

BizTalk SOAP 接收位置性能不佳

使用 BizTalk 而不是 NServiceBus 或 MassTransit 的优点/缺点