【发布时间】:2014-03-14 16:18:16
【问题描述】:
问题描述:
1.Biztalk 应用程序接收格式化/压缩的数据文件,其中包含超过 200 万条数据记录。
2.创建了管道组件,用于处理文件并将这 200 万条数据记录“分解”成更小的切片消息,每条消息约 2000 条记录。
3.Slice-messages 被发送到 SQL 端口并由存储过程处理。Slice-messages 包含文件名和批处理 id。
问题:
A. 知道在 SQL 端接收到的所有切片消息和对整个文件的处理完成的最佳方法是什么?
B.biztalk端口有没有办法说“在所有类型A的消息都发送完之前不要发送B类型的消息”(消息优先级)?
以下是我尝试过的可能解决方案:
S1.在最后一个切片消息的末尾添加特定的“文件结束”标签,表示文件正在处理,存储过程将收到这部分消息标记文件已完成。 但是因为消息是异步传递的,所以最后一条消息可以更早地在 sql 上接收到,其他消息和我将有虚假竞争事件。 因此,此解决方案仅适用于“有序传递端口”——但这种类型的端口性能较差,因为一次只发送一条消息。
S2.将总记录数转移到每个切片消息中,并在收到每个切片消息后运行 count() sql 语句。 由于存储数据的表非常庞大,即使以文件名作为参数运行计数也需要时间。
我想知道是否有更好的解决方案来知道正在接收所有消息?
【问题讨论】:
-
除非文件名字段没有索引,否则计数应该需要很长时间。
标签: biztalk