我们目前正在构建一个基于Akka.NET的DDD原则的参与者系统。
在如何使我们的服务具有弹性方面,我们缺少了几点:
如果有些消息丢失了,我们不知道该怎么办,因此我们不能转移到下一个状态来完成一个请求,该请求涉及多个参与者。
我的想法是使用事件流系统,比如动态传递消息。然后我们在任何地方都有弹性,只需要知道我们处理过的流中的哪个事件。我是不是漏了什么东西?你觉得这是goot的主意吗?这是否违反了一些最佳做法?
发布于 2018-01-21 16:24:46
对于Akka.NET (以及实际上所有流行的分布式参与者模型实现)来说,一次性交付是一个深思熟虑的选择。在过去,来自JVM的原始Akka在持久性队列上有邮箱实现,但是这个想法在几年前作为失败的实验而被放弃了。
在某些情况下,有确认就足够了,例如,用户发送请求并期望响应在某个超时内到达。如果答复没有到达,即因为一些消息丢失了,只需将一个失败返回给请求者(并可能要求他/她重试)。
另一种常见的模式是在特定的位置使用队列/日志,即作为参与者系统前面的层。这样,所有的用户请求都首先发送到持久队列,然后由参与者系统逻辑从队列中获取它们。一旦内部参与者完成了请求的处理,他们就可以提交请求并从队列中删除。如果发生了某些故障,则只需重新尝试整个过程(或其中的一部分)。
https://stackoverflow.com/questions/48325415
复制相似问题