问题描述:
1.有Biztalk应用程序接收包含>的格式化/压缩数据文件。 200万条数据记录。
2.处理文件和处理文件的管道组件'将这200万条数据记录到较小的切片消息中,每条记录约有2000条记录。
3.Slice-messages正被发送到SQL端口并由存储过程处理.lice-messages包含文件名和批处理ID。
问题:
A.知道在SQL端完成所有切片消息和整个文件处理的最佳方法是什么?
B.在biztalk端口中是否有任何方式可以说"不发送类型B的消息,直到A类的所有消息都被发送为" (消息优先)?
以下是我尝试的可行解决方案:
S1。添加特定的文件结尾'标签到最后一条slice-message表示正在处理文件并且存储过程将收到这部分消息标记文件已完成。 但是因为消息是异步传递的,所以可以在早先的sql上接收消息,而其他消息和我将有错误竞争的事件。 所以这个解决方案只适用于" Ordered delivery ports" - 但是这种类型的端口性能很差,因为一次只发送一条消息。
S2.Transfer总记录计入每个切片消息并在收到每个切片消息后运行count()sql语句。 因为存储数据的表非常庞大,所以即使以filename作为参数运行计数也需要时间。
我想知道是否有更好的解决方案知道所有消息都被接收了?
答案 0 :(得分:1)
以下是我将如何做到这一点。
当临时表为空时,轮询SP可以不返回任何内容(适配器将默默地忽略响应)或返回一个标记“无所事事”并自行处理。
答案 1 :(得分:1)
让您的管道组件发出"批次"消息,其中包含批处理中的记录计数以及可将其链接回切片消息记录的某些唯一标识符。 同时处理切片消息和批处理消息的存储过程检查批处理总计(如果切片消息处理是否存在)是否与处理的总数匹配,如果匹配,则表示您已完成处理它们。