【问题标题】:De-batching and asynchronous processing of the messages消息的去批处理和异步处理
【发布时间】: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


【解决方案1】:

让您的管道组件发出一个“批处理”消息,其中包含批处理中的记录数和一些可以将其链接回切片消息记录的唯一标识符。 让处理切片消息的存储过程和批处理消息检查批处理总计(如果切片消息过程还存在)是否与处理的总计匹配,如果它们匹配,那么您已经完成了处理它们全部。

【讨论】:

    【解决方案2】:

    以下是我的处理方法。

    1. 通过 SSIS 将 2MM 记录加载到一个或多个 SQL Server 表中。
    2. 以任何可以让您获得可接受的性能配置文件的速度排空表格。
    3. 在处理(完成)时删除记录。
    4. 当“FILE001.txt”不再存在记录时,SQL Server 将返回一个标志 说“FILE001.txt 完成”。
    5. 做进一步处理。

    当临时表为空时,轮询 SP 可以不返回任何内容(适配器将默默地忽略响应)或返回“无事可做”的标志,您自己处理。

    【讨论】:

    • 感谢您的回复。但是所有内容都已进入 Biztalk ,SSIS 不是一个选项。文件接收和处理异步。
    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    相关资源
    最近更新 更多