问题描述:
1. Biztalk应用程序接收包含超过200万条数据记录的格式化/压缩数据文件。
2.创建了处理文件的流水线组件,并将这200万条数据记录“批次”成较小的条-消息,每条记录约2000条。
3.片-消息被发送到SQL端口并由存储过程处理。细消息包含文件名和批处理id。
问题:
A.What将是最好的方式来知道,所有的切片消息接收和处理整个文件完成了SQL方面?
B.Is --在biztalk端口中有任何方式可以说:“在发送A类型的所有消息之前,不要发送B类型的消息”(消息优先级)?
这里有我尝试过的可能的解决方案:
S1.将特定的‘文件结束’标记添加到最后一个切片-消息的末尾,说明文件正在处理,存储过程将在完成后接收消息标记文件的这一部分。但是,由于消息是异步传递的,所以可以在前面的sql上接收到最后一条消息,其他消息和我将发生虚假竞争事件。因此,此解决方案仅适用于“有序传递端口”--但这种类型的端口性能较差,因为一次只发送一条消息。
S2.将总记录计数到每条片消息中,并在收到每条片消息后运行count() sql语句。因为存储数据的表非常大,即使以文件名作为参数运行计数也需要时间。
我想知道是否有更好的解决方案来知道所有的消息都被接收了?
发布于 2014-03-16 20:26:16
让管道组件发出一个“批处理”消息,其中包含批处理中记录的计数,以及一些唯一的标识符,该标识符可以将其链接回片消息记录。让处理切片消息的存储过程和批处理消息检查,以查看批处理总数(如果对于切片消息进程还存在)是否与已处理的总数匹配,如果它们匹配,那么您已经完成了它们的全部处理。
发布于 2014-03-14 18:42:02
我会这样处理这件事。
当暂存表为空时,轮询SP可以不返回任何内容( Adapter将悄然忽略响应),或者返回一个标记,上面写着"nothing to do“,然后由您自己处理。
https://stackoverflow.com/questions/22410495
复制相似问题