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

问题描述

我正在寻找一种最佳解决方案来满足一项业务需求。业务需要向客户发送短信以参与投票。

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

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

我的问题是如何设计可以毫无问题地处理数百万条记录的解决方案,哪个会更好的控制台应用程序或工作流?

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

标签: c#sql-serverweb-servicesmicrosoft-dynamicsdynamics-crm-2016

解决方案


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

这就是我解决问题的方法:

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

  2. 实现了一个 Async Post Create 插件,它将所有这些信息发送到 Azure 服务总线队列。异步在这里非常重要,以便尽可能少地阻塞动态。这个插件应该尽可能的轻,并且没有任何业务逻辑。

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

还有一些注意事项

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

推荐阅读