【问题标题】:How to recover queued messages in akka actor in case of node crash?如何在节点崩溃的情况下恢复akka actor中的排队消息?
【发布时间】:2017-12-26 02:43:31
【问题描述】:

如果节点崩溃并且在那个时间点消息在邮箱中排队,那么这些消息将如何被重新处理? 如果它们不能被重新处理,那么我们怎么能说 akka 编程模型是容错的。这是我们现在必须使用持久队列的最基本用例。

【问题讨论】:

    标签: akka akka-stream akka-persistence


    【解决方案1】:

    消息不会被处理,会丢失; Akka 不保证消息传递 - 这在其文档的开头明确说明。然而,这并不妨碍使程序具有容错性。最简单的方法之一是实现带有确认的消息,并使参与者重新发送未确认的消息。

    【讨论】:

    • 虽然我同意你的逻辑,但希望它这么简单..如果它这么简单,就不需要使用像akka这样的微服务框架。这是它没有像应有的那样受欢迎的最大原因之一。 Akka 应该为我解决这些问题,在他们解决这些问题之前,他们的人气图表几乎会停滞不前,人们会更喜欢像 kafka 这样的经纪人
    • @MarutSingh,你混淆了不同的东西。 Akka 不是消息代理,也不是微服务框架,它是并发范式的实现。像 CPS(通道和协程,想想 Go)或裸线程。 Akka 并非旨在替代消息总线;实际上,它们可以很好地相互补充。例如,我在项目中使用 RabbitMQ 作为不同进程之间的媒介,而进程本身是在内部使用 Akka 构建的,并且还使用 Akka 进行集群。
    • 不同意你的想法。Akka 至少现在是一个微服务框架,Typesafe 正在推广它。微服务需要发现、负载均衡、通信,而 akka 提供了大部分开箱即用的服务。它不是消息的替代品,但它在内部使用消息总线。唯一的事情是你不安装任何外部软件,因为它是对等的。和 vert.x 一样。如果你使用 akka 进行集群,那么 RabbitMQ 在哪里出现?
    • 目前我没有看到 RabbitMQ 和 akka 共存的用例,除非使用不同的堆栈来创建服务,因此 akka 不是架构中每个微服务的一部分跨度>
    • 我再说一遍,Akka 只是一个基于参与者的并发范式的实现,带有一些扩展(例如网络和集群),它不是一个微服务框架。它也不使用消息总线,这是一个完全不同的概念:例如,消息总线通常在发布-订阅场景中工作,当多个客户端监听来自多个源的事件时。 Actor 模型完全相反:Actor 直接相互发送消息。因此,它提供了与消息代理完全不同的保证,并解决了不同的任务。
    【解决方案2】:

    整个类型安全堆栈都是围绕微服务构建的。如果您有疑问,请阅读他们的演示文稿。Akka 流 Alla HTTP 他们都在这个方向上...似乎您对微服务的看法与我的不同...尽管您错过了要点..分布式容错架构问题应该由 Akka 解决..如果您使用的是 rabbitmq,那么您将无法获得 akka 的所有好处..就像位置透明.. Actor heiraarchy..发布您的架构图到 Akka 论坛,看看你得到什么回应

    【讨论】:

    • 整个类型安全堆栈都是围绕微服务构建的。如果您有疑问,请阅读他们的演示文稿。Akka 流式传输 Alla HTTP 他们都在这个方向上......似乎您对微服务的看法与我的不同。 ..尽管您错过了要点..分布式容错架构问题应该由 Akka 解决.. 如果您使用的是 rabbitmq,那么您将无法获得 akka 的所有好处.. 就像位置透明性.. Actor heiraarchy ..将你的架构图发布到 Akka 论坛,看看你得到什么回应
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2015-02-23
    • 2013-03-18
    相关资源
    最近更新 更多