1

作为改变我们的应用从巨型巨石到麦克风的一部分我们正在开发通知微服务,可供所有其他模块用于发送电子邮件,SMS ,推送通知等。AKKA.NET - 排队和重试

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

  1. 一个基于REST的API,可以由用户注册等模块调用触发通知。当ReST API被调用时,该服务将加载适当的模板,填写必要的值并调用通知服务来发送电子邮件。如果API调用失败,则通知的详细信息将被发送到回地面任务,这将放弃并引发错误

  2. 后台任务前重试一个固定次数的作用,其将其将放弃和引发错误

我们最初的计划是使用一个队列中的两个部件之间进行通信之前,重试了固定次数用于发送所述通知的动作。流程将如下所示

客户端 - >重新设置API - >加载模板和填充值 - >呼叫通知服务 - >将消息添加到队列(在通知失败的情况下) - >返回地面任务拉取队列消息 - >重试动作 - >在最大重试次数失败的情况下将通知标记为失败(将手动取消

而不是使用队列,另一种方法是使用持久性AKKA因为AKKA.NET支持邮箱,但没有发现任何类似的用例......如果我们选择akka.net,我们是否在正确的道路上...请发送您的评论

回答

0

我认为队列是一个适当的抽象 - 将一些消息发布到队列并让通知服务使用它们。如果通知服务已关闭,则它们将保持在队列中,直到恢复为止。像Kafka这样的东西可能很适合这个,但是你可以在你当前使用的任何数据库中实现某些东西。除非你有更复杂的逻辑,否则我可能不会沿着Actor路线走下去。