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

问题描述 投票:0回答:1

我正在寻找解决一个业务需求的最佳解决方案。企业需要向客户发送短信以参与投票。

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

从CRM方面,我需要处理所有记录并更新SMS内容并缩短URL并将其更新到外部数据库。使用第三方API缩短网址。

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

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

c# sql-server web-services microsoft-dynamics dynamics-crm-2016
1个回答
0
投票

我实际上已经遇到了类似的情况,我可以给你的最好建议是将所有业务逻辑外部化到另一个系统/进程,所有繁重的工作都应该在Dynamics 365之外完成。

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

  1. 创建了一个SMS消息自定义实体,就像您在动态中所做的那样,包含发送短信所需的所有信息(电话号码,消息,状态等)。
  2. 实现了Async Post Create插件,该插件将所有这些信息发送到Azure Service Bus队列。异步在这里非常重要,因此尽可能少地阻止Dynamics。这个插件应该尽可能轻,并且没有任何业务逻辑。
  3. 创建一个Azure函数,以便在队列收到新消息时触发。这个Azure功能完成了我需要的所有业务逻辑,主要是与SMS网关的集成。在您的情况下,它可以调用第三方API来缩短URL,与外部数据库集成等。最后,使用缩短的URL和您需要的其他信息更新Sms消息记录。

还有一些笔记

  • 如果您觉得您的流程需要提升性能,那么您可以轻松扩展大多数Azure服务,与在内部动态中处理它相比,这是一个主要优势。
  • 在第2步中,您也可以使用Webhook实现此逻辑。
  • 您需要的吞吐量越高,您应该考虑用WebJob替换第2步和第3步,以递归方式搜索并获取仍需要处理的动态中的所有Sms消息(例如,您可以通过处理状态来控制它)然后完成所需的所有逻辑,如步骤3所示。
© www.soinside.com 2019 - 2024. All rights reserved.