通过上一篇文章,我们已经大致了解怎么使用 Akka,期待细致用法。这篇文章将介绍如何用 Akka-testkit 对 Akka 程序进行测试。...不同的文章有不同的说法,比如 http://rerun.me/2014/09/29/akka-notes-logging-and-testing/ 就把 Actor 测试需求分为:1)发送消息给 Actors..., 2)测试内部状态,3)测试日志和 4)带参数 Actor 的测试。...3 Akka-testkit 的使用 Maven 项目要使用 Akka-testkit,需要在 pom.xml 文件中加入 akka-testkit 包,如下所示。...Akka 系列系列文章 Akka 使用系列之一: 快速入门 Akka 使用系列之二: 测试 Akka 使用系列之三: 层次结构和容错机制 Akka 使用系列之四: Future
我们可以使用像Swagger(用于文档),Docker(用于测试环境),Selenium(用于端到端测试)等工具,但是我们最终还是会因为更改API而浪费大量时间,因为他们不是说谁适合来使用它们,或者设置合适的环境来执行集成测试...一般情况下,在开发Web应用程序的时候,从模型和流程定义开始,深入到软件开发中,都是使用TDD(测试驱动开发)方法:先写测试,考虑我们真正想要的,以及我们如何使用它; 但微服务(microservices...HTTP项目的标准依赖关系(通用于提供者和消费者),spry-json用于JSON序列化和反序列化,SL4J用于日志记录,scalatest和scalamock作为测试和模拟框架,以及Scala协议为...另外,我已经用两种不同的格式实现了测试,WordSpec和FunSpec,第一次用于所有的单元测试,第二次用于Pact测试,你可以按你的想法随意使用。...code 0 我已经使用IntelliJ IDEA CE来执行测试,但是您可以直接使用这些命令来使用sbt: sbt test:它执行扩展了FunSpec和WordSpec的所有测试(如在build.sbt
技术栈 这篇文章,我选择了Scala作为语言,Akka HTTP作为框架。...我们可以轻松地使用SBT创建一个新的Scala项目并定义build.sbt,如下所示: build.sbt 正如你所看到的,Akka HTTP项目的标准依赖关系(通用于提供者和消费者),spry-json...用于JSON序列化和反序列化,SL4J用于日志记录,scalatest和scalamock作为测试和模拟框架,以及Scala协议为CDC测试。...该测试是使用Akka HTTP Route TestKit实现的,您可以在这里找到官方文档,它允许在这种格式的路由上构建测试: BaseTestAppServer的类包含基本的依赖WordSpec...在此之前,为了检查我们的服务是否符合消费者契约,我们必须完成定义Akka HTTP应用程序的基本服务: MyLibraryAppServer.scala 这个类定义了两个方法,一个是启动我们的服务器所必需的
,或者是具有以前未使用的persistenceId的新持久性 Actor,Actor 也将始终收到RecoveryCompleted消息。...如果持久性 Actor 当前未恢复,则deliver方法将消息发送到目标 Actor。恢复时,将缓冲消息,直到使用confirmDelivery确认消息。...例如,这允许持久性 Actor 故障转移到备份节点,并继续从备份节点使用共享日志实例。 警告:共享的 LevelDB 实例是一个单一的故障点,因此只能用于测试目的。...警告:共享日志/快照存储是单一故障点,因此应仅用于测试目的。...这些特性需要能够在后台执行异步任务,以便处理与持久性相关的内部事件。当「测试基于持久性的项目」时,总是依赖于使用TestKit的异步消息传递。 配置 持久性模块有几个配置属性,请参阅参考「配置」。
OAuth2是一套行业标准的网络资源使用授权协议,也就是为用户提供一种授权凭证,用户凭授权凭证来使用网络资源。申请凭证、然后使用凭证进行网络操作流程如下: ? ? ...下面我们写一段客户端代码来测试上面这个webserver的功能: import akka.actor._ import akka.stream._ import akka.http.scaladsl.Http...import akka.http.scaladsl.model.headers._ import scala.concurrent._ import akka.http.scaladsl.model...." %% "akka-http" % "10.1.8", "com.typesafe.akka" %% "akka-stream" % "2.5.23", "com.pauldijou" %...._ import akka.stream._ import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives._
为另一个框架的近似移植,Akka.Net带来了原版的所有好主意,但也带来了有争议的设计决定(例如HOCON配置)。 Akka.Net主要集中在传统角色和监督层次的使用案例上。...虽然开箱即用的1.4版本使用了Newtonsoft JSON序列化器,但我们的测试表明,使用Hyperion序列化器(目前正在测试)可以获得更好的性能。...优点 使用众所周知和经过测试的通信和集群标准 能够将聚类与本地监督层级相结合 在我们的ping-pong基准中具有最高的消息吞吐量 近几个月来,文档得到了许多改进 在集群中分布和定位行为者的各种选项(...该框架本身是用Go编写的,但它运行在实际应用的旁边(例如在sidecar容器中),并通过HTTP或gRPC调用与之进行通信。这很有趣,因为你可以用任何技术建立一个基于行为体的解决方案。...如果你已经使用了Dapr,就很方便 持久性的提醒--即使行为者已被停用,计时器也能工作。 缺点 sidecar和应用程序之间的HTTP通信的开销。
自 Akka 2.1 开始,可以使用akka.actor.guardian-supervisor-strategy来配置它,该设置采用了一个SupervisorStrategyConfigurator的完全限定类名.../system: The System Guardian,为了实现有序的关闭顺序,引入了这个特殊的守护者,当所有正常的 Actor 都终止,日志记录也保持活动状态,即使日志记录本身也是使用 Actor...否则不能排除第三种原因,这就导致了内部状态需要清除的结论。...使用 BackoffSupervisor 模式延迟重新启动 作为内置模式提供的akka.pattern.BackoffSupervisor实现了所谓的指数退避监督策略(exponential backoff...一个主要示例是当「PersistentActor」因持久性失败而失败(通过停止)时,这表明数据库可能已关闭或过载,在这种情况下,在启动持久性 Actor 之前给它一点时间来恢复是很有意义的。
GitHub 地址:http://github.com/apache/pulsar/ 介绍 最近,我一直在研究 Pulsar 及其与 Kafka 的比较。...用户还可以创建非持久性 topic;•N 层存储:Kafka 的一个问题是,存储费用可能变高。...流示例 举一个客户端示例,我们在 Akka 上使用 Pulsar4s。...现在,我们可以像往常一样使用 Akka Streams 处理数据。...Pulsar 使用场景 Pulsar 可用于广泛的场景: •发布/订阅队列消息传递;•分布式日志;•事件溯源,用于永久性事件存储;•微服务;•SQL 分析;•Serverless 功能。
wget http://downloads.typesafe.com/akka/akka_2.11-2.4.10.zip upzip -q akka_2.11-2.4.10.zip -d /opt mv.../opt/akka_2.11-2.4.10 /opt/akka KAFKA 由于我们将会使用Spark内置的Stream KAFKA功能,这个功能现在绑定了KAFKA 8.x....可以使用yum安装。...的类库到spark里,这样spark应用就可以使用AKKA的类库。...可以通过其日志文件查看实际的端口号。
事实上,Pekko 是 Akka 项目的一个分支。不久前, Akka 的许可证从 Apache 2 更改为 Business Source License 1.1,Pekko 作为新的分支从中拉出。...目前还有一些现有的 Apache 项目,例如 Flink,它们在不同程度上使用了 Akka,因此让 Pekko 成为 Apache 的一部分给了这些其他 Apache 项目的信心。...在此之上,Pekko 提供了一套丰富的构建在 Actors 之上的库来解决现代问题,包括: 流:遵循响应式标准的完全双向背压流 HTTP:建立在流之上的全流式 HTTP 客户端 / 服务器,还提供高可用性...Web 服务所需的预期工具(例如连接池) 连接器:一组丰富的连接器集,用于构建在流之上的各种数据库、消息传递、持久性服务 grpc:一个 gRPC 服务器 / 客户端 投影(projection):提供...此外,我们需要配置 Apache 构建系统以正确构建一个相当复杂的项目(即 akka 核心有需要多节点机器的测试)。” 点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!
Akka 中文指南的 GitHub 地址为「akka-guide」 跨多个数据中心集群 本章介绍如何跨多个数据中心、可用性zones或区域使用 Akka 集群。...为了避免这些问题,可以为每个数据中心运行一个单独的 Akka 集群,并使用数据中心之间的另一个通信通道,例如 HTTP、外部消息代理或集群客户端。...服务的外部 API 将是 HTTP、gRPC 或消息代理,而不是 Akka 远程处理或集群(参见 Lagom 框架文档中的其他讨论:内部和外部通信),但是在多个节点上运行的服务内部通信将使用普通的 Actor...这是一个实现细节,但如果你能在日志消息中看到这一点,就更好了。...尤其是当与基于单编写器原则(single-writer principle)的 Akka 持久性一起使用时,避免在多个位置同时运行同一实体和共享数据存储是很重要的。
Akka初探 Akka基于Actor模型设计,其中Actor是处理消息和进行计算的基本单位。...解决方案:使用Future或ask模式异步处理耗时操作,保持Actor的非阻塞特性。...死信与监控 问题描述:未被处理的消息可能因目标Actor未启动或已终止而变为死信,导致资源浪费或逻辑错误。...解决方案:在Actor类中实现unhandled方法,捕获未处理的消息类型,并给出合理的响应或日志记录。...合理使用并发工具:如使用ActorSystem.scheduler()安排定时任务,避免直接使用线程池。 监控与日志:充分利用Akka的日志和监控功能,及时发现并解决问题。
值得庆幸的是akka-http已经提供了对缓存的支持,是基于java8 caffein的一套缓存操作工具包的。下面就介绍一下akka-http的caching。...: import akka.http.scaladsl.util.FastFuture import akka.http.caching.scaladsl.Cache import akka.http.caching.scaladsl.CachingSettings...//最大单位 .withTimeToLive(1.hour) //最长存留时间 .withTimeToIdle(30.minutes) //最长未使用时间...我们来看看如何实现缓存管理: 在akka-http里可以用两种方式来实现缓存管理:1、直接用cache工具,2、用akka-http提供的Directive: cache, alwaysCache 我们先看看如何直接使用...//最大单位 .withTimeToLive(1.hour) //最长存留时间 .withTimeToIdle(30.minutes) //最长未使用时间
retries":3 } 注意 mapWithState & TTL 的重要性 在处理包含无限多键的数据时,要考虑到 keyed 状态保留策略(通过 TTL 定时器来在给定的时间之后清理未使用的数据...如果你的 keyed 状态包含在某个 Flink 的默认窗口中,则将是安全的:即使未使用 TTL,在处理窗口的元素时也会注册一个清除计时器,该计时器将调用 clearAllState 函数,并删除与该窗口关联的状态及其元数据...虽然这对于测试和少量键的数据来说是很好的选择,但如果在生产环境中遇到无限多键值时,会引发问题。由于状态是对你隐藏的,因此你无法设置 TTL,并且默认情况下未配置任何 TTL。...Flink App上线之前要在一个单独的Flink集群上进行测试,否则一个不稳定、存在问题的Flink App上线,很可能影响整个Flink集群上的App。...(3) akka.pattern.AskTimeoutException: Ask timed out on [Actor[akka://...]] after [10000 ms] Akka超时导致,
retries":3 } 注意 mapWithState & TTL 的重要性 在处理包含无限多键的数据时,要考虑到keyed状态保留策略(通过TTL定时器来在给定的时间之后清理未使用的数据...如果你的keyed状态包含在某个Flink的默认窗口中,则将是安全的:即使未使用TTL,在处理窗口的元素时也会注册一个清除计时器,该计时器将调用clearAllState函数,并删除与该窗口关联的状态及其元数据...虽然这对于测试和少量键的数据来说是很好的选择,但如果在生产环境中遇到无限多键值时,会引发问题。由于状态是对你隐藏的,因此你无法设置TTL,并且默认情况下未配置任何TTL。...Flink App上线之前要在一个单独的Flink集群上进行测试,否则一个不稳定、存在问题的Flink App上线,很可能影响整个Flink集群上的App。...(3)akka.pattern.AskTimeoutException:Ask timed out on [Actor[akka://...]] after [10000 ms] Akka超时导致,一般有两种原因
与PersistentActor不同而且更复杂的是AtleastOnceDelivery-Actor的状态除自定义的结构外还必须包括未确认收到的消息(outstanding messages)。...从这个例子比较简单的功能操作中我们可明显感觉到写入日志的流量:CalcAggregator好像就是在不断的把经历的指令写入日志然后等待回复,回复时间就是Calculator运算时间。...试想下次启动系统进行日志重演时会怎样:启动时间长度等于系统累积运算的时间长度。这很可怕,花几个小时来恢复状态可能是常态。所以必须充分利用快照,采用一套有效的日志、快照维护方式来提高状态恢复效率。...下面是加入了日志快照维护功能的新代码: package atleastonce.calculation import akka.actor._ import akka.persistence._ import...deleteSnapshots(SnapshotSelectionCriteria(maxSequenceNr = m.sequenceNr - 1)) deleteMessages(m.sequenceNr) 使用了下面这段代码来测试
服务调用(同步或异步(流))允许服务使用已发布的API和标准协议(HTTP和WebSockets)进行通信。 Lagom服务由接口,称为服务描述符。...使用流式传输消息需要使用Akka流。 tick服务调用将返回以指定间隔发送消息的源。 Akka流对这样的流有一个有用的构造函数: ? 前两个参数是发送消息之前的延迟以及它们应该发送的间隔。...使用JPA,您通常只存储当前状态,并且未捕获状态达到的历史记录。您通过向其发送命令消息与PersistentEntity进行交互。实体将自动分布在服务集群中的节点之间。...有关配置项目以使用Cassandra的说明,请参阅为持久实体使用Cassandra。如果要使用上面列出的关系数据库之一,请参阅为持久性实体使用关系数据库,了解如何配置项目。...6.当您看到消息“服务启动...”时,通过从任何HTTP客户端(例如浏览器)调用hello服务端点来验证服务是否正在运行:http:// localhost:9000 / api /Hello/World
测试 Actor Hello World示例中的测试展示了 JUnit 框架的使用。虽然测试的覆盖范围不完整,但它简单地展示了测试 Actor 代码是多么的容易,并提供了一些基本概念。...测试类使用的是akka.test.javadsl.TestKit,它是用于 Actor 和 Actor 系统集成测试的模块。这个类只使用了TestKit提供的一部分功能。...集成测试可以帮助我们确保 Actor 的行为是异步的。第一个测试使用TestKit探针来询问和验证预期的行为。...日志输出包含诸如何时和从哪个 Actor 记录日志之类的信息。现在,让我们将重点放在 Printer Actor 的输出上: ... Howdy, Akka ... Hello, Java ......测试和运行 对于测试,我们只需右键单击文件src/test/java/com/lightbend/akka/sample/HelloAkkaTest.java,然后选择Run 'HelloAkkaTest
Akka 采用分布式计算,并通过消息传递使通信的易出错性变得明确,因此它不会试图撒谎并模拟泄漏的抽象。这是一个在 Erlang 成功使用的模型,需要用户围绕它设计自己的应用程序。...本地消息发送的可靠性 Akka 测试套件依赖于在本地上下文中不丢失消息(对于非错误条件测试也适用于远程部署),这意味着我们确实尽了最大努力保持测试的稳定性。...Akka 持久性模块的“至少一次传递”支持具有业务级确认的ACK-RETRY协议。通过跟踪通过"至少一次传递"发送的消息的标识符,可以检测到重复的消息。...如果组件的状态由于机器故障或被推出缓存而丢失,则可以通过重放事件流(通常使用快照来加快进程)来重建。Akka Persistence 支持「事件源」。...为了有助于实现这一目的,最好避免在可能的情况下发送死信(dead letters),也就是说,使用合适的死信记录器(letter logger)不时的运行应用程序,并清除日志输出。
akka的运行模式和用例 akka有两种运行模式: As a library: 一个使用于web应用,把akka作为一个普通的jar包放到classpath或者WEB-INF/lib。...使用了Spark。...%% "spark-core" % "2.0.0" ) resolvers += "Akka Snapshots" at "http://repo.akka.io/snapshots/" application.conf...测试应用 启动Spark服务 启动spark集群master server $SPARK_HOME/sbin/start-master.sh master服务,默认会使用7077这个端口。...可以通过其日志文件查看实际的端口号。
领取专属 10元无门槛券
手把手带您无忧上云