c# - 如何设计解决方案来处理 CRM 2016 onPrem 中的大量记录?
问题描述
我正在寻找一种最佳解决方案来满足一项业务需求。业务需要向客户发送短信以参与投票。
在 CRM 中,我们有一个自定义实体来控制 SMS 内容、URL 和提醒,以及一个外部数据库来管理交易。
从 CRM 方面,我需要处理所有记录并更新 SMS 内容并缩短 URL 并将其更新到外部数据库。使用 3rd 方 api 缩短 url。
我的问题是如何设计可以毫无问题地处理数百万条记录的解决方案,哪个会更好的控制台应用程序或工作流?
如何避免性能问题,如果我将这么多人口放在 foreach 循环/并行 foreach 循环中以通过以下操作处理记录 -
1. 对 CRM 实体记录执行更新
2. 调用第 3 方 api 以获取缩短 url 以响应和更新在 CRM 实体
3. 更新外部数据库中的一些标志和 SMS 内容。
解决方案
实际上,我遇到过与您类似的情况,我能给您的最佳建议是将所有业务逻辑外部化到另一个系统/流程,所有繁重的工作都应该在 Dynamics 365 之外完成。
这就是我解决问题的方法:
像您在动态中所做的那样创建了一个SMS 消息自定义实体,其中包含发送文本消息所需的所有信息(电话号码、消息、状态等)。
实现了一个 Async Post Create 插件,它将所有这些信息发送到 Azure 服务总线队列。异步在这里非常重要,以便尽可能少地阻塞动态。这个插件应该尽可能的轻,并且没有任何业务逻辑。
创建了当队列接收到新消息时触发的 Azure 函数。这个 Azure 函数完成了我需要的所有业务逻辑,主要是与 SMS 网关的集成。在您的情况下,它可以调用第 3 方 API 来缩短 url,与外部数据库集成等。最后,使用缩短 url 和您需要的其他信息更新 Sms 消息记录。
还有一些注意事项
- 如果您觉得您的流程需要提高性能,您可以轻松扩展大多数 Azure 服务,这是一个主要优势,而不是在动态内部处理它。
- 在第 2 步中,您也可以使用Webhook实现此逻辑。
- 您需要的吞吐量越高,您越应该考虑将步骤 2 和 3 替换为 WebJob,该 WebJob 递归搜索并获取 Dynamics 中仍需要处理的所有 Sms 消息(例如,您可以使用要处理的状态来控制它)然后执行您需要的所有逻辑,如步骤 3 所示。
推荐阅读
- angular - 从服务器响应加载带有 ngModel 的 html 模板
- python - 在 Django 中使用包含 html 表单和模型表单的表单添加验证错误
- php - 如何在php中转换这个数组?
- node.js - Multer:意外的领域
- python - 如何将组标签分配给具有特定时间间隔内的日期时间的 pandas df 行?
- python - 借助 pyOpt 库中可用的 NLPQL 优化器进行 python 优化
- performance - Julia 的广播速度是 Matlab 的两倍
- weblogic - Yjw 连接到 Weblogic 管理服务器?
- ubuntu - Lighthouse npm 模块在每次运行后创建临时文件夹并且从不删除它们
- python - 使用 10 个线程打印升序数字