如何设计解决方案以处理CRM 2016 onPrem中的大量记录?

时间:2019-03-23 13:50:54

标签: c# sql-server web-services microsoft-dynamics dynamics-crm-2016

我正在寻找解决一项业务需求的最佳解决方案。企业需要向客户发送SMS来参加投票。

在CRM中,我们有一个自定义实体来控制SMS内容,URL和提醒,还有一个外部数据库来管理交易。

在CRM方面,我需要处理所有记录并更新SMS内容,并缩短URL并将其更新到外部数据库。要使用3rd party api缩短网址。

我的问题是如何设计能够处理数百万条记录而不会出现任何问题的解决方案,哪个将是更好的Console app或Workflow?

如何避免性能问题,如果我将这么多的人口放入一个foreach循环/并行foreach循环中,以执行以下操作来处理记录-
1.对CRM实体记录进行更新
2.调用第三方api以获取响应中的缩短URL并在CRM实体中进行更新
3.更新外部数据库中的一些标志和SMS内容。

1 个答案:

答案 0 :(得分:0)

我实际上遇到了与您类似的情况,我能给您的最佳建议是将所有业务逻辑外部化到另一个系统/流程中,所有繁重的工作都应在Dynamics 365之外完成。

这是我解决问题的方法:

  1. 创建了一个 SMS消息自定义实体,就像您在动力学中所做的那样,它具有发送文本消息所需的所有信息(电话号码,消息,状态等)。

  2. 实现了“异步发布后创建”插件,该插件会将所有这些信息发送到Azure Service Bus队列。异步在这里真的很重要,这样就可以尽可能少地阻止动态。该插件应该尽可能轻巧,并且没有任何业务逻辑。

  3. 创建了一个Azure函数,当队列接收到新消息时将触发该函数。该Azure功能完成了我需要的所有业务逻辑,主要是与SMS网关的集成。在您的情况下,它可以调用第三方API来缩短URL,与外部数据库集成等。最后,使用缩短的URL和所需的其他信息来更新Sms Message记录。

更多笔记

  • 如果您认为您的流程需要提高性能,则可以轻松扩展大多数Azure服务,这与在动态过程中进行处理相比是一个主要优势。
  • 在步骤2中,您也可以使用Webhook来实现此逻辑。
  • 您需要的吞吐量越高,您应考虑用WebJob替换步骤2和3的更多内容,该WebJob递归搜索并获取Dynamics中仍需要处理的所有Sms消息(您可以使用状态对其进行控制(例如,待处理),然后执行所需的所有逻辑,如步骤3所示。