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

使用Akka HTTP构建微服务:CDC方法

我们可以使用像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

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

【翻译】使用Akka HTTP构建微服务:CDC方法

技术栈 这篇文章,我选择了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 这个类定义了两个方法,一个是启动我们的服务器所必需的

2K30

Akka 指南 之「持久化」

,或者是具有以前使用的persistenceId的新持久性 Actor,Actor 也将始终收到RecoveryCompleted消息。...如果持久性 Actor 当前恢复,则deliver方法将消息发送到目标 Actor。恢复时,将缓冲消息,直到使用confirmDelivery确认消息。...例如,这允许持久性 Actor 故障转移到备份节点,并继续从备份节点使用共享日志实例。 警告:共享的 LevelDB 实例是一个单一的故障点,因此只能用于测试目的。...警告:共享日志/快照存储是单一故障点,因此应仅用于测试目的。...这些特性需要能够在后台执行异步任务,以便处理与持久性相关的内部事件。当「测试基于持久性的项目」时,总是依赖于使用TestKit的异步消息传递。 配置 持久性模块有几个配置属性,请参阅参考「配置」。

3.3K30

比较.NET 平台下 四种流行Actor框架

为另一个框架的近似移植,Akka.Net带来了原版的所有好主意,但也带来了有争议的设计决定(例如HOCON配置)。 Akka.Net主要集中在传统角色和监督层次的使用案例上。...虽然开箱即用的1.4版本使用了Newtonsoft JSON序列化器,但我们的测试表明,使用Hyperion序列化器(目前正在测试)可以获得更好的性能。...优点 使用众所周知和经过测试的通信和集群标准 能够将聚类与本地监督层级相结合 在我们的ping-pong基准中具有最高的消息吞吐量 近几个月来,文档得到了许多改进 在集群中分布和定位行为者的各种选项(...该框架本身是用Go编写的,但它运行在实际应用的旁边(例如在sidecar容器中),并通过HTTP或gRPC调用与之进行通信。这很有趣,因为你可以用任何技术建立一个基于行为体的解决方案。...如果你已经使用了Dapr,就很方便 持久性的提醒--即使行为者已被停用,计时器也能工作。 缺点 sidecar和应用程序之间的HTTP通信的开销。

8210

Akka 指南 之「监督和监控」

Akka 2.1 开始,可以使用akka.actor.guardian-supervisor-strategy来配置它,该设置采用了一个SupervisorStrategyConfigurator的完全限定类名.../system: The System Guardian,为了实现有序的关闭顺序,引入了这个特殊的守护者,当所有正常的 Actor 都终止,日志记录也保持活动状态,即使日志记录本身也是使用 Actor...否则不能排除第三种原因,这就导致了内部状态需要清除的结论。...使用 BackoffSupervisor 模式延迟重新启动 作为内置模式提供的akka.pattern.BackoffSupervisor实现了所谓的指数退避监督策略(exponential backoff...一个主要示例是当「PersistentActor」因持久性失败而失败(通过停止)时,这表明数据库可能已关闭或过载,在这种情况下,在启动持久性 Actor 之前给它一点时间来恢复是很有意义的。

1K20

更改许可后,Akka 分支 Pekko 进入 Apache 孵化器

事实上,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 官网,获取更多精彩内容!

1.1K20

Akka 指南 之「跨多个数据中心集群」

Akka 中文指南的 GitHub 地址为「akka-guide」 跨多个数据中心集群 本章介绍如何跨多个数据中心、可用性zones或区域使用 Akka 集群。...为了避免这些问题,可以为每个数据中心运行一个单独的 Akka 集群,并使用数据中心之间的另一个通信通道,例如 HTTP、外部消息代理或集群客户端。...服务的外部 API 将是 HTTP、gRPC 或消息代理,而不是 Akka 远程处理或集群(参见 Lagom 框架文档中的其他讨论:内部和外部通信),但是在多个节点上运行的服务内部通信将使用普通的 Actor...这是一个实现细节,但如果你能在日志消息中看到这一点,就更好了。...尤其是当与基于单编写器原则(single-writer principle)的 Akka 持久性一起使用时,避免在多个位置同时运行同一实体和共享数据存储是很重要的。

1.4K30

生产上的坑才是真的坑 | 盘一盘Flink那些经典线上问题

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超时导致,

4.8K40

Flink经典的生产问题和解决方案~(建议收藏)

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超时导致,一般有两种原因

3.7K11

Akka(15): 持久化模式:AtLeastOnceDelivery-消息保证送达模式

与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) 使用了下面这段代码来测试

1.4K50

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

服务调用(同步或异步(流))允许服务使用已发布的API和标准协议(HTTP和WebSockets)进行通信。 Lagom服务由接口,称为服务描述符。...使用流式传输消息需要使用Akka流。 tick服务调用将返回以指定间隔发送消息的源。 Akka流对这样的流有一个有用的构造函数: ? 前两个参数是发送消息之前的延迟以及它们应该发送的间隔。...使用JPA,您通常只存储当前状态,并且捕获状态达到的历史记录。您通过向其发送命令消息与PersistentEntity进行交互。实体将自动分布在服务集群中的节点之间。...有关配置项目以使用Cassandra的说明,请参阅为持久实体使用Cassandra。如果要使用上面列出的关系数据库之一,请参阅为持久性实体使用关系数据库,了解如何配置项目。...6.当您看到消息“服务启动...”时,通过从任何HTTP客户端(例如浏览器)调用hello服务端点来验证服务是否正在运行:http:// localhost:9000 / api /Hello/World

1.9K50

快速入门 Akka Java 指南

测试 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

7.9K31

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

Akka 采用分布式计算,并通过消息传递使通信的易出错性变得明确,因此它不会试图撒谎并模拟泄漏的抽象。这是一个在 Erlang 成功使用的模型,需要用户围绕它设计自己的应用程序。...本地消息发送的可靠性 Akka 测试套件依赖于在本地上下文中不丢失消息(对于非错误条件测试也适用于远程部署),这意味着我们确实尽了最大努力保持测试的稳定性。...Akka 持久性模块的“至少一次传递”支持具有业务级确认的ACK-RETRY协议。通过跟踪通过"至少一次传递"发送的消息的标识符,可以检测到重复的消息。...如果组件的状态由于机器故障或被推出缓存而丢失,则可以通过重放事件流(通常使用快照来加快进程)来重建。Akka Persistence 支持「事件源」。...为了有助于实现这一目的,最好避免在可能的情况下发送死信(dead letters),也就是说,使用合适的死信记录器(letter logger)不时的运行应用程序,并清除日志输出。

1.7K10
领券