1

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

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

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

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

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

客户端 --> ReST API --> 加载模板和填充值 -> 调用通知服务 --> 将消息添加到队列(以防通知失败)--> 后台任务拉取队列的消息 --> 重试操作--> 将通知标记为失败,以防最大重试失败(将手动占用

除了使用队列,另一种方法是使用持久的 AKKA.NET 参与者来执行此操作,因为 AKKA.NET 支持邮箱但尚未找到任何类似的用例......如果我们选择 akka.net,我们是否走在正确的道路上...请发送您的意见

4

1 回答 1

0

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

于 2016-12-28T12:48:34.807 回答