Akka 消息传递保证

2024-02-04

我正在尝试找出 Akka 支持哪些消息传递保证。我得出以下结论:

最多一次:默认支持

至少一次:由 Akka Persistence 支持

恰好一次:?

Akka支持exactly-once吗?如果不这样做,我怎样才能实现这一目标?


正如您所发现的,开箱即用的 Akka 提供最多一次交付。 At-Least-Once 在某些库(例如 Akka Persistence)中可用,您可以通过在 Actor 中创建 ACK-RETRY 协议来相当轻松地自行创建它。发送方持续定期发送消息,直到接收方确认收到消息。

简单来说,为了至少一次责任由发件人承担。例如在 Scala 中:

class Sender(receiver: ActorRef) extends Actor {

  var acknowledged = false

  override def preStart() {
    receiver ! "Do Work"
    system.scheduler.scheduleOnce(50 milliseconds, self, "Retry")
  }

  def receive = {
    case "Retry" => 
      if(!acknowledged) {
        receiver ! "Do Work"
        system.scheduler.scheduleOnce(50 milliseconds, self, "Retry")
      }

    case "Ack" => acknowledged = true
  }
}

class Receiver extends Actor {

  def receive = {
    case "Do Work" => 
      doWork()
      sender ! "Ack"
  }

  def doWork() = {...}
}

但通过最多一次处理,接收者必须确保同一消息的重复实例只会导致工作完成一次。这可以通过使接收者完成的工作具有幂等性以便可以重复应用,或者通过让接收者保留其已处理内容的记录来实现。为了至多一次责任由接收者承担:

class AtMostOnceReceiver extends Actor {

  var workDone = false

  def receive = {

    case "Do Work" =>
      if(!workDone) {
        doWork()
        workDone = true
      }
      sender ! Ack
  }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Akka 消息传递保证 的相关文章

  • FSM 与 Akka 中的成为/不成为

    Akka 提供了两种有些重叠的方式来管理 Actor 状态 有限状态机 http doc akka io docs akka 2 4 14 scala fsm html and 不成 成为 http doc akka io docs akk
  • MergeLatest 的默认值

    官方文档 https doc akka io docs akka current stream operators Source or Flow mergeLatest html of MergeLatest状态 MergeLatest 为
  • Scala Future 和 java 8 CompletableFuture

    的简介CompletableFuturesJava 8 带来了可用的语言功能scala concurrent Future例如一元变换 有什么区别 以及为什么 Scala 开发人员应该更喜欢 Scala Futures 而不是 java 8
  • Actor 系统无响应:ThreadPoolExecutor 调度程序仅创建核心线程池,显然忽略最大线程池大小

    更新 我发现如果我设置ThreadPoolExecutor s核心池大小与最大池大小相同 29 个线程 但是 如果我将核心池大小设置为 11 最大池大小设置为 29 那么 Actor 系统只会创建 11 个线程 我该如何配置ActorSys
  • Play/Akka 与 Java OutputStreams 集成

    我正在写剧本 该应用程序公开了 REST API 允许用户生成 PDF 报告 我受到使用旧 Java API 来生成实际报告的要求的限制 那个库有一个方法generate OutputStream out 即需要一个java io Outp
  • Akka Actor 带有 TimeoutException 的“询问”和“等待”

    我正在使用 Scala 和 Akka 建模一个简单的 P2P class Node extends Peer with Actor var peers List ActorRef List def receive case register
  • 用于 REST 轮询的 Akka

    我正在尝试将大型 Scala Akka PlayMini 应用程序与外部 REST API 连接起来 这个想法是定期轮询 基本上每 1 到 10 分钟 根 URL 然后爬取子级 URL 以提取数据 然后将其发送到消息队列 我想出了两种方法来
  • Akka/Java getContext().become 带参数?

    在 Akka Scala 中 可以将参数传递给自定义接收函数 因此可以通过 params 传递整个 actor 状态 而无需使用可变变量 context become myCustomReceive param1 param2 但在 Jav
  • Akka设计原则

    在开发一个相当大的 Akka 应用程序时 我在使用普通方法和非 Akka 类时遇到了一个非常简单的结构 但在使用 Akka 时实际上很难确定 这就是为什么我来这里问你什么建议是解决此问题的最佳方法 所以问题是这样的 我有一个父角色 我们称他
  • 在 Akka 中等待多个结果

    在 Akka 中等待多个 actor 结果的正确方法是什么 The 反应式编程原理 https www coursera org course reactiveCoursera 课程有一个使用复制键值存储的练习 在不详细讨论分配的细节的情况
  • 远程创建 Akka Actor,无需新的 ActorSystem

    我已经仔细阅读了文档好几次了 http doc akka io docs akka 2 1 4 scala remoting html http doc akka io docs akka 2 1 4 scala remoting html
  • 如何检测scala执行上下文耗尽?

    我的 Playframework 应用程序有时没有响应 我想在运行时检测到这一点 记录有关当前在耗尽的执行上下文上运行的内容的信息 实现这一目标的最佳策略是什么 我考虑过将小型可运行对象发布到执行上下文 如果它们没有及时执行 我会记录一条警
  • Akka 2.1.2 Scheduler 出现问题(“系统”无法识别)

    根据这些示例 我试图运行一个非常简单的循环函数循环 http doc akka io docs akka 2 1 2 scala scheduler html http doc akka io docs akka 2 1 2 scala s
  • 如何每天在特定时间触发 akka 调度程序?

    我创建了一个 Akka 的调度程序 每天在固定时间发送邮件 例如每天上午 6 00 那么如何称呼演员呢 我的意思是我应该使用什么逻辑 谢谢 只需计算现在和接下来的下午 6 点之间的差异 将其作为初始延迟 然后每 24 小时重复一次
  • 我可以从任意异步任务访问 Http.Context.current() 吗?

    我正在开发一个移动应用程序的后端 该应用程序当前在 Play 2 1 1 上运行 作为处理某些请求的一部分 我们会发送推送通知 发送推送通知的下游请求应该完全异步 并且与移动客户端的原始请求响应分离 我想访问Http Context cur
  • 如何在不使用 zip() 的情况下将不同类型的 Future 组合成一个 Future

    我想创造一个类型的未来Future Class1 Class2 Class3 从下面的代码 然而 我发现做到这一点的唯一方法是使用 zip 我发现这个解决方案很丑陋而且不是最佳的 谁能启发我 val v for a lt val f0 Fu
  • 如何处理 Akka 子 actor 的长时间初始化?

    我有一个演员 它创建一个子演员来执行一些冗长的计算 问题是子 Actor 的初始化需要几秒钟 并且父 Actor 在子 Actor 创建和完全初始化之间发送给子 Actor 的所有消息都将被丢弃 这是我正在使用的代码的逻辑 class Ch
  • 案例类和案例对象之间的区别?

    我正在学习 Scala 和 Akka 并且在最近的查找中solution https stackoverflow com questions 22770927 waiting for multiple results in akka 我发现
  • 在 Akka 中配置嵌套 Router

    我有一些嵌套的路由器 应创建它FromConfig 我想要的是这样的 test akka actor deployment worker router round robin nr of instances 5 slave router b
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那

随机推荐

  • 如何在不存储一副牌的情况下实现荷官类?

    Question 即使只有 52 张牌 permutationIndex我在其中描述的地方说明部分 将是一个巨大的数字 它是其中之一的数字52 需要29个字节来存储 Thus 我不知道一个简单的方法来计算permutationIndex一个
  • 作为 Android .apk 一部分的 Pdf 文件

    我必须构建一个 Android 应用程序来显示 pdf 文件列表 这些 pdf 文件应该受到保护 换句话说 应用程序的用户不应该能够通过任何方式 复制 剪切 打印 等 获取 pdf 内容的副本 我现在的问题是 我应该如何将 pdf 文件的内
  • 使用正则表达式标记字符串中的文本但排除链接

    我有一个文本 我希望当用户搜索某个术语时 通过用标记标签包裹该术语来突出显示该术语 javascript 来包装匹配项 var sampleText window document getElementById test innerHTML
  • java - 使用基类实例在派生类中访问受保护的成员

    我在派生类中创建了基类的实例并尝试访问受保护的成员 我可以直接访问派生类中的受保护成员 而无需实例化基类 基类 package com core public class MyCollection protected Integer int
  • 尝试在 Windows Phone 开发中心更新 XAP 时出错

    我正在尝试提交 Windows Phone 应用程序的更新 但是当我单击 更新应用程序 并选择相应的 xap 文件时 出现以下错误消息 ScriptObject InvokeFailed 参数 调试资源字符串不可用 通常 键和参数提供了足够
  • JSON 编码/解码 GTK 枚举

    我必须将自定义 GTK 元素的各种属性保存到文件中以供将来使用 并由于简单的格式和字典嵌套而决定使用 JSON 许多属性都是 GTK 枚举 例如gtk PAGE ORIENTATION PORTRAIT gtk ANCHOR CENTER
  • C 中的整数溢出:标准和编译器

    感谢 Carl Norum 的编辑 以包含正确的标准参考 C 标准规定 If an 特殊情况发生在表达式求值期间 即 如果结果未在数学上定义或不在其类型的可表示值范围内 则行为未定义 是否有编译器开关可以保证整数溢出时的某些行为 我想避免鼻
  • 如何取消定义或删除 JavaScript 函数?

    我定义了一个全局 Javascript 函数 function resizeDashBoardGridTable gridID var table document getElementById treegrid gridID 在使用这个函
  • 是否有一种标准方法来为 Java EE 容器定义 JDBC 数据源?

    我知道对于 JBoss 您需要在相应实例的 deploy 子目录中有一个 name ds xml 文件 我没有任何使用其他 Java EE 容器的经验 但我试图尽可能遵守标准 是否有定义 JDBC 数据源并部署它的标准方法 如果可能的话 我
  • 外部内联函数会发生什么?

    如果我在 h 文件中将函数定义为 extern int returnaint void 在相关的 c 文件中将其定义为 inline int returnaint void return 1 并将标头包含在另一个 c 文件中并使用该函数 当
  • 适用于 html5 和 jquery 应用程序的条码扫描器

    我正在一个项目中使用 Jquery 和 html 它是一个静态 Web 应用程序 我需要一个 jquery 来读取产品中条形码扫描仪的条形码 需要扫描条形码而不在屏幕的任何文本框中显示代码 有人请给我一些想法或为我提供插件的链接 如果有 来
  • PHP 中 C# 的“List ”等价物是什么?

    我正在使用一个 API 它要求我提供一个List
  • EF Code First:使用 Fluent API 映射非表对象

    我应该如何使用 Fluent API 映射 EF Code First 中的重要对象 例如视图 StoredProcedure 等 代码优先中尚不支持映射到存储过程和 vew 这些是 Julia Lerman 的编程实体框架 代码优先的一些
  • 带有两个 ArrayList 的 Android ListView 适配器

    In our chat app we want to use cool new Library SQLBrite https github com square sqlbrite to update chat on database cha
  • 未找到特征“Illuminate\Foundation\Auth\Access\AuthorizesResources”

    有人熟悉我遇到的这个错误吗 请帮忙谢谢 如果您使用 Laravel 5 3 请执行以下操作 来自升级指南 AuthorizesResources Trait AuthorizesResources 特征已与 AuthorizesReques
  • VS 2012 / 2013 AccessViolationException

    当我运行项目 F5 时 我在 IDE 中收到以下异常 An unhandled exception of type System AccessViolationException occurred in System Windows For
  • 仅包含单个 mp4 文件的 MPEG-DASH 视频流

    我研究了一周 寻找一种简单且独立于平台的方法 将 mp4 文件传输到任何浏览器 如果浏览器不兼容 将使用渐进式流 直接下载 方法 我的场景是这样的 单个 mp4 文件 未分段和复用 音频 视频 支持 HTTP 字节范围服务 在浏览器不兼容的
  • Android studio 重命名包后抛出 Nomatching client found

    我按照下面的链接重命名了包 重命名后 当我尝试构建项目时 android studio 会抛出类似的错误 Android Studio重命名包 https stackoverflow com questions 16804093 andro
  • 多个if条件excel,矩阵结构

    Box type Box type Box type Box type BinLoc 810 811 911 822 S1 2 0 1 0 S2 4 2 2 1 S3 12 6 6 3 S4 24 12 12 6 R1 48 24 24 1
  • Akka 消息传递保证

    我正在尝试找出 Akka 支持哪些消息传递保证 我得出以下结论 最多一次 默认支持 至少一次 由 Akka Persistence 支持 恰好一次 Akka支持exactly once吗 如果不这样做 我怎样才能实现这一目标 正如您所发现的