【发布时间】:2019-10-23 11:59:08
【问题描述】:
我正在向 C# Web 应用程序添加 SMS 通知。简而言之,用户登录界面、键入消息、选择收件人并保存。我正在使用 Hangfire 来启动后台作业 - 这些作业处理实际的建筑,然后通过提供商(当前为 Nexmo)发送 SMS 消息。
Nexmo 以及大多数其他 SMS 提供商对其 API 设置了限制,这将出站消息排队的能力限制为 X/秒,该速率根据您的帐户级别而有所不同。出于测试目的,我限制为 1/秒。
目前,当我的后台进程开始时,我正在跟踪 API 调用之间经过的时间量,如果小于 1 秒,我将线程置于休眠状态剩余的时间量。这似乎工作得很好,然而我遇到的问题是多个并行后台进程可能同时运行,例如当两个用户触发 SMS 出站消息发出时同时。还有另一项复杂性,如果您使用 2 个出站号码,您的 API 限制实际上会加倍(1 条消息/秒,来自 每个 使用的号码)。我目前忽略了这一点,只是在所有 API 调用之间进行延迟。
我正在寻找有关如何规避此问题的任何建议。我的一个想法是将消息处理与后台作业完全分离——hangfire作业只是构建消息并将它们标记为排队等待发送,以及一个单独的单线程应用程序,它基本上充当观察者并发送消息FIFO .
任何建议将不胜感激!
【问题讨论】:
标签: c# api function-call nexmo