作为将我们的应用程序从巨型单块改为麦克风的一部分我们正在开发通知微服务,所有其他模块都可以使用它来发送电子邮件,短信,推送等通知通知等。
此通知服务的一个客户端是我们计划开发的Windows服务,它会触发用户注册,密码重置等各种事件的电子邮件通知。 Windows服务将有2个部分
基于REST的API,可由用户注册等模块调用以触发通知。调用ReST API时,此服务将加载相应的模板,填写必要的值并调用通知服务以发送电子邮件。如果api呼叫失败,通知的详细信息应发送到后台任务,这将在放弃并引发错误之前重试该操作一定次数
后台任务将在放弃并引发错误之前将操作重试固定次数以发送通知
我们最初的计划是使用队列在两个部分之间进行通信。流程将是这样的
客户 - > ReST API - >加载模板和填充值 - >呼叫通知服务 - >将消息添加到队列(如果通知失败) - >后台任务拉取队列的消息 - >重试动作 - >如果最大重试失败(将手动接收
),请将通知标记为失败不使用Queue,另一种方法是使用持久性AKKA.NET actor来执行此操作,因为AKKA.NET支持Mail box但没有找到任何类似的用例...如果我们选择,我们是否在正确的道路上akka.net ...请发送你的评论
答案 0 :(得分:0)
我认为队列是适当的抽象 - 将一些消息发布到队列并让通知服务使用它们。如果通知服务已关闭,它们将保留在队列中,直到它恢复为止。像卡夫卡这样的东西可能非常适合这种情况,但你可以在你当前使用的任何数据库中实现某些东西。我可能不会沿着Actor路线走,除非你有更复杂的逻辑。