首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消息的去批处理和异步处理

消息的去批处理和异步处理
EN

Stack Overflow用户
提问于 2014-03-14 16:18:16
回答 2查看 368关注 0票数 0

问题描述:

1. Biztalk应用程序接收包含超过200万条数据记录的格式化/压缩数据文件。

2.创建了处理文件的流水线组件,并将这200万条数据记录“批次”成较小的条-消息,每条记录约2000条。

3.片-消息被发送到SQL端口并由存储过程处理。细消息包含文件名和批处理id。

问题:

A.What将是最好的方式来知道,所有的切片消息接收和处理整个文件完成了SQL方面?

B.Is --在biztalk端口中有任何方式可以说:“在发送A类型的所有消息之前,不要发送B类型的消息”(消息优先级)?

这里有我尝试过的可能的解决方案:

S1.将特定的‘文件结束’标记添加到最后一个切片-消息的末尾,说明文件正在处理,存储过程将在完成后接收消息标记文件的这一部分。但是,由于消息是异步传递的,所以可以在前面的sql上接收到最后一条消息,其他消息和我将发生虚假竞争事件。因此,此解决方案仅适用于“有序传递端口”--但这种类型的端口性能较差,因为一次只发送一条消息。

S2.将总记录计数到每条片消息中,并在收到每条片消息后运行count() sql语句。因为存储数据的表非常大,即使以文件名作为参数运行计数也需要时间。

我想知道是否有更好的解决方案来知道所有的消息都被接收了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-16 20:26:16

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

票数 1
EN

Stack Overflow用户

发布于 2014-03-14 18:42:02

我会这样处理这件事。

  1. 通过SSIS将2MM记录加载到Server表中。
  2. 不管怎么说,都要把桌子抽干,给你一个可接受的性能简介。
  3. 删除正在处理的记录(已完成)。
  4. 当不存在"FILE001.txt“的记录时,Server将返回一个标记”FILE001.txtComplete“。
  5. 做进一步的处理。

当暂存表为空时,轮询SP可以不返回任何内容( Adapter将悄然忽略响应),或者返回一个标记,上面写着"nothing to do“,然后由您自己处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22410495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档