如何在BizTalk中处理单个EDI文件中的多个批次?
解决BizTalk处理多批次EDI文件的死锁问题
先拆分EDI交换为独立批次
用BizTalk的EDI Disassembler拆分功能,在接收管道的EDI拆解器里开启Split Interchange选项,把单文件里的多批次拆成独立消息,从根源减少单消息处理时的资源竞争。收缩编排的事务范围
死锁大多是事务太宽泛或者资源抢着用导致的:- 别把整个编排都包在一个事务里,只给数据库写入这类必要步骤加事务。
- 如果编排里有循环处理批次的逻辑,每次循环结束要释放资源,别一直攥着锁不放。
调优并发控制参数
- 降低接收位置的
Maximum Concurrent Calls数值,别让接收和编排的并发量太高,减少资源冲突。 - 要是不需要严格的消息处理顺序,关掉接收端口的
Ordered Delivery,提升并发能力的同时降低死锁概率。
- 降低接收位置的
排查数据库锁竞争
要是编排涉及数据库操作:- 检查SQL语句有没有长时间占锁的情况,优化语句,别搞全表扫描或者长事务。
- 允许脏读的场景可以加
NOLOCK提示,或者把数据库隔离级别改成READ COMMITTED SNAPSHOT,减少锁等待时间。
验证消息路由逻辑
确认拆分后的批次消息能正确路由到编排,别因为路由错了导致消息堆积或重复处理。去BizTalk管理控制台看看消息箱里的挂起消息,排查是不是有未处理消息占着资源。
内容的提问来源于stack exchange,提问作者Hardik
相关产品推荐
相关产品推荐

