首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Akka 指南 之「持久化」

-- sbt --> libraryDependencies += "com.typesafe.akka" %% "akka-persistence" % "2.5.20" Akka 持久性扩展附带了一些内置持久性插件...事件源 请参阅「EventSourcing」的介绍,下面是 Akka 通过持久性 Actor 实现的。 持久性 Actor 接收(非持久性)命令,如果该命令可以应用于当前状态,则首先对其进行验证。...Types),暴露基础日志所理解的数据类型,例如,对于理解 JSON 的数据存储,可以写一个EventAdapter的toJournal:Any=>JSON,这样日志就可以直接存储 JSON,而不是将对象序列化为其二进制表示...存储插件 日志和快照存储的存储后端可以插入到 Akka 持久性扩展中。 Akka 社区项目页面提供了持久性日志和快照存储插件的目录,请参阅「社区插件」。...当持久性 Actor 重写journalPluginConfig和snapshotPluginConfig方法时,Actor 将使用声明的Config对象,并对默认配置进行回退(fallback)。

3.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

使用Lagom和Java构建反应式微服务系统

当不使用请求或响应消息时,可以在其位置使用akka.NotUsed。请求和响应消息类型分为两类:严格和流式传输。严格的消息是可以由简单的Java对象表示的单个消息。...使用流式传输消息需要使用Akka流。 tick服务调用将返回以指定间隔发送消息的源。 Akka流对这样的流有一个有用的构造函数: ? 前两个参数是发送消息之前的延迟以及它们应该发送的间隔。...Lagom产生消息的主要来源是持久性实体事件。响应于发生的事情而不是以特殊方式发布事件,最好从持久性实体获取事件流,并将其适应于发送到消息代理的消息流。...Lagom支持持久性的阅读侧处理器和消息代理主题订阅者。要在实体启动时重新创建当前状态,将重放事件。...例如,从需要的地方从数据库加载JPA @Entity,即可能有许多具有相同实体标识符的Java对象实例。相比之下,只有一个具有给定标识符的PersistentEntity实例。

1.9K50

Akka 指南 之「消息传递可靠性」

另一个方面是本地发送将在同一个 JVM 中传递对消息的引用,而对发送的底层对象没有任何限制,而远程传输将限制消息的大小。 因此假设 Actor 之间的远程通信是安全的,这个一个悲观的赌注。...以这种初始创建消息(initial creation message)重新排序的方式向 Actor 发送消息意味着消息可能不会到达,因为 Actor 还不存在。...因为在 JVM 上不存在完全公平的锁,所以这是不可修复的。 同样的机制在Router的构建过程中使用,更精确地说是路由的ActorRef,因此对于部署了路由器的 Actor 来说,同样的问题也存在。...Akka 持久性模块的“至少一次传递”支持具有业务级确认的ACK-RETRY协议。通过跟踪通过"至少一次传递"发送的消息的标识符,可以检测到重复的消息。...还要考虑在该节点上生成死信,它可以确定发送操作失败,对于远程发送,死信可以是本地系统(如果无法建立网络连接)或远程系统(如果你要发送到的 Actor 在该时间点不存在)。

1.7K10

可扩展伸缩架构中的状态

在面向对象编程中,一个对象可以看成是由一些数据组成的,包含一些访问这些数据的操作方法。...这些对象内部数据由于会被对象方法改变,这属于对象内部的状态,OOP强烈建议改变状态的行为和状态应该放在一起(放在一个对象中)。这样才能保证,在前置条件和后置条件下使得代码更容易测试。...Akka是实现Actor模型的工具集,这个模型是混合了OOP和FP风格处理状态,每个Actor管理自己的状态,但是操作状态的动作是按消息顺序发生的,因此任何时刻不存在两个行为同时改变状态,从而避免了锁。...HTTP请求周期:在一个HTTP请求对象是持有一个有限状态机,这个周期相当短,这样我们只能让状态保留在内存中,大部分时间我们能通过失败重试的方式简化,而不是使用Akka持久层复杂技术。...3.Durability持久性:Kafka有强的持久保证,消息会写到磁盘在几个broker之间复制,不要使用Kafka作为状态长期保存,可以将消息备份到亚马逊S3或Hadoop。

85920

异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka

---- Akka概述 Akka 是一个开源的并发、分布式、基于消息驱动的框架,用于构建高可伸缩性、可靠性和并发性强的应用程序。...以下是 Akka 框架的关键概念和特点: Actor 模型:Akka 的核心构建块是 Actor,它是一种轻量级并发原语。...插件和扩展:Akka 提供了丰富的插件和扩展机制,可以轻松集成其他库和框架,如 Akka HTTP、Akka Streams 等,以构建全栈应用程序。...---- 传统编程模型存在的问题 对封装特性的挑战 面向对象编程中的封装要求数据只能通过对象提供的方法间接访问,但多线程下多个线程同时修改对象内部数据会导致线程安全问题。...使用Actor优雅地处理错误 Actor模型中不存在共享调用堆栈,因此错误处理方式不同。 目标Actor可以回复错误消息,提示发生错误情况,错误作为普通消息处理。

56240

基于zookeeper的微服务实践

1.1 为什么选择微服务系统 微服务系统之前是服务化系统,服务化系统提倡同构系统,比如系统内统一采用某种通信框架(AKKA、CORBA等),而且从某种层面上也限制了开发语言,为什么会这样,因为服务化系统一般是由一个团队打造的...基于zookeeper实现简单的微服务系统 现在开源社区已经有很多成熟的服务注册中心构件,如Eureka、Consul等,其实zookeeper在某些应用场景下也是一个很好的选择,这里选择它作为实践对象也是由于...3.1 实现原理 大家应该了解zookeeper有两个特性: znode有两种类型:持久性znode和临时znode,而临时znode一旦回话过期就会被zookeeper回收; zookeeper的znode...基于这两个特性,就可以提供一个服务注册中心的功能: 每个微服务作为zookeeper的客户端可以在zookeeper上发布自己的信息:首先创建一个持久性节点(服务名),然后在服务上线时持久性节点下创建一个临时节点...3.2 代码实现 本实践是基于go语言开发了一个服务注册客户端(略简陋,但稳定性和可靠性都有考虑到),服务端是zookeeper,每个服务会创建一个以服务名命名的持久性节点,而每当服务上线后会在持久性节点下创建一个

1.1K40

Akka 指南 之「第 3 部分: 使用设备 Actors」

如果我们处理对象,我们通常将 API 设计为接口,由实际实现来填充抽象方法集合。在 Actor 的世界里,协议取代了接口。虽然在编程语言中无法将一般协议形式化,但是我们可以组成它们最基本的元素,消息。...因此,我们需要考虑温度不存在的情况。这还允许我们在不存在写入部分的时候测试 Actor 的查询部分,因为设备 Actor 可以报告空结果。 从设备 Actor 获取当前温度的协议很简单。...本地发送将在同一个 JVM 中传递对消息的引用,而对发送的底层对象没有任何限制,而远程传输将限制消息的大小。...import java.util.Optional; import akka.actor.AbstractActor; import akka.actor.Props; import akka.event.Logging...akka.actor.AbstractActor.Receive; import akka.actor.Props; import akka.event.Logging; import akka.event.LoggingAdapter

55130

阅读源码|Spark 与 Flink 的 RPC 实现

如果我们使用 Akka 作为底层 RPC 的实现,本身 Akka 会有相应的基础组件,包括 ActorSystem 或者进一步使用 Akka Cluster 的话相应的 Cluster 对象。...版本问题在 Lightbend 全家桶里是不存在的,例如 Play 通过接口暴露底层的 Akka 数据结构,并固定依赖到某一个版本,这样使用 Play 的人需要 Akka 的功能是只需要通过接口拿到对应的...这个问题很好解决,即用一个变量保存当前的 sender() 后面传递这个对象而不是再次调用 sender() 获取对象。...这一点实际上跟 RMI 是比较相似的,可以创建一个本地的对象调试,需要访问远端对象的时候就创建一个远端对象的引用。...由于发送的对象是确定的,就是和 RpcServer 保存的 ActorRef 对应的对象,因此不需要指定方法接收者。 根据方法的返回值类型进行不同的处理。

1.2K20

Akka 指南 之「Actor 引用、路径和地址」

akka.pattern.ask创建这个 Actor 引用。 DeadLetterActorRef是死信服务的默认实现,Akka 将其目的地关闭或不存在的所有消息路由到该服务。...EmptyLocalActorRef是 Akka 在查找不存在的本地 Actor 路径时返回的:它相当于一个DeadLetterActorRef,但它保留了自己的路径,以便 Akka 可以通过网络发送它...例如: "akka://my-sys/user/service-a/worker1" // purely local "akka.tcp://my-sys@host.example.com...因此,每个 Actor 也有一个物理路径,从实际 Actor 对象所在的 Actor 系统的根守护者开始。...当测试对象依赖于在特定路径上实例时,也可能需要在测试期间使用它。在这种情况下,最好模拟其监督者,以便将Terminated消息转发到测试过程中的适当点,以便后者等待正确的名称注销。

1.6K20

Akka 指南 之「Actor 模型如何满足现代分布式系统的需求?」

对于对象,当一个方法返回时,它释放对其执行线程的控制。在这方面,Actor 的行为非常类似于对象,它们对消息作出反应,并在完成当前消息的处理后执行返回。...Actor 对消息的反应就像对象对调用它们的方法“反应”一样。...我们需要考虑两种错误: 第一种情况是,由于任务中的错误(通常是一些验证问题,如不存在的用户 ID),目标 Actor 上的委派任务失败。...这项服务称为监督,是 Akka 的核心概念。 ? 一个监督者(父级节点)可以决定在某些类型的失败时重新启动其子 Actor,或者在其他失败时完全停止它们。...现在,让我们简单介绍一下 Akka 提供的功能。

1.2K30

Akka 指南 之「Actors」

createReceive方法的结果是AbstractActor.Receive,它是围绕部分 Scala 函数对象的包装。...在Props对象的构造过程中,会验证是否存在匹配的构造函数,如果未找到匹配的构造函数或找到多个匹配的构造函数,则会导致IllegalArgumentException。...另一方面,在 Actor 的同伴对象(companion object)中的Props工厂中使用这个变体是完全正确的,如下面的“推荐实践”中所述。...如果不存在这样的 Actor 或标识在提供的timeout内未完成,则完成此操作并抛出akka.actor.ActorNotFound异常。...信息和不变性 重要的:消息可以是任何类型的对象,但必须是不可变的。Akka 还不能强制执行不可变性,所以必须按惯例执行。

4K30

我们的技术实践

的技术实践 我们产品用的AKKA并不够深入,仅仅使用了AKKA的基本功能。...不存在隐藏的内部状态导致渲染不同。 在React中尽可能使用extends而不是mixin; 对State进行范式化,不要定义嵌套的State结构,不同数据的相互引用都通过ID来查找。...在Container组件中,如果Store里面的模型对象需要根据id进行filter或merge之类的操作,则交给selector对其进行封装。于是Container组件中就可以这样来调用: ?...使用REST CLIENT对REST服务进行测试,而不能盲目地信任Spray提供的ScalatestRouteTest对客户端请求的模拟,因为这种模拟其实省略了对Json对象的序列化与反序列化; 为核心的...DSL方式编写REST服务,因为它可能让函数的嵌套层次太深;如果在一个HttpService(在我们的项目中,皆命名为Router)中,提供的服务较多,建议将各个REST动作都抽取为一个返回Route对象的私有函数

1.2K50

(三)JPA - EntityManager的使用

4、EntityManager EntityManager 是完成持久化操作的核心对象。 EntityManager 对象在一组实体类与底层数据源之间进行 O/R 映射的管理。...实体类的状态: 新建状态: 新创建的对象,尚未拥有持久性主键; 持久化状态:已经拥有持久性主键并和持久化建立了上下文环境; 游离状态:拥有持久化主键,但是没有与持久化建立上下文环境; 删除状态...注意:该方法只能移除持久化对象。...如果这个实体存在于当前的持久化环境,则返回一个被缓存的对象;否则会创建一个新的 Entity, 并加载数据库中相关信息;若 OID 不存在于数据库中,则返回一个 null。...OID(主键) 在数据库不存在,getReference() 不会返回 null 值, 而是抛出EntityNotFoundException。

19110

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券