AKKA.NET - 排队和重试

AKKA.NET - Queuing and Retry

作为将我们的应用程序从一个巨大的整体转变为一个麦克风的一部分,我们正在开发一个 Notification 微服务,所有其他模块都可以使用它来发送通知,例如电子邮件、短信、推送通知等

此通知服务的一个客户端是我们计划开发的 windows 服务,它会针对用户注册、密码重置等各种事件触发电子邮件通知。 windows 服务将包含 2 个部分

  1. 基于 REST 的 API 可以被用户注册等模块调用以触发通知。当调用 ReST API 时,此服务将加载适当的模板,填写必要的值并调用通知服务以发送电子邮件。如果 api 调用失败,通知的详细信息应发送到 后台任务 ,它将在放弃之前重试该操作固定次数并引发错误

  2. 后台任务将在放弃和引发错误之前重试该操作固定次数以发送通知

我们最初的计划是使用队列在两个部分之间进行通信。流程会是这样

Client --> ReST API --> load Template and Fill Values -> Call Notification Service --> 添加消息到 Queue (In case Notification失败) --> 后台任务拉取队列的消息 --> 重试操作 --> 将通知标记为失败,以防最大重试次数失败(将手动处理

不使用队列,另一种方法是使用持久性 AKKA.NET actor 来执行此操作,因为 AKKA.NET 支持邮箱但尚未找到任何类似的用例......我们在如果我们选择正确的路径 akka.net... 请发送您的评论

我认为队列是对此的适当抽象 - 将一些消息发布到队列并让通知服务使用它们。如果通知服务出现故障,它们会留在队列中,直到它恢复正常。像 Kafka 这样的东西可能很适合这个,但你可能会在你当前使用的任何数据库中实现一些东西。除非你有更复杂的逻辑,否则我可能不会走 Actor 路线。