更重要的是:用protobuf和gRPC进行client/server交互不涉及任何http对象包括httprequest,httpresponse,很容易上手使用,而且又有在google等大公司内部的成功使用经验...虽然gRPC基于http/2协议在网络通讯效率和模式上有了很大的提升,但近段时间对gRPC使用的调研主要还是冲着protobuf来的。...至于akka-grpc基于akka-streams的特性,我并没有感到太大的兴趣。如上所述,我们的目标是实现一种开放数据平台的终端接入接口。...akka-streams恰恰把总体方案限制在了内部系统集成模式,因为服务端客户端就是akka-streams的两端,是内部系统集成的场景。...在akka-grpc的官网上有很好的示范例子。我在例子的基础上增加了身份验证使用的示范。
正在哪个节点运行的情况下,如何向其发送消息?...如何将消息发送给集群中对命名主题感兴趣的所有 Actor?...状态为「WeaklyUp」的集群成员将参与分布式发布订阅,即如果发布服务器和订阅服务器位于网络分区的同一侧,则状态为WeaklyUp的节点上的订阅服务器将接收已发布的消息。...如果订阅group ID,则通过提供的RoutingLogic(默认随机)将发布到主题的每条消息(sendOneMessageToEachGroup标志设置为true)传递给每个订阅组中的一个 Actor...使用sendOneMessageToEachGroup=false发布的消息将不会传递给使用组 ID 订阅的订阅者。
Akka包含很多模块,Akka Actor是Akka的核心模块,使用Actor模型实现并发和分布式,可以将你从Java的多线程痛苦中解救出来;Akka Streams可以让你以异步非阻塞的方式处理流数据...,并且支持背压(backpressure); Akka Http实现了一套基于流的HTTP服务端和客户端;Akka Cluster可以帮你实现一个分布式集群系统;Cluster Sharding可以帮你做集群的分片处理...;Distributed Data可以帮助你在集群之间分享数据;Alpakka可以帮你为Akka Streams集成不同的数据源;Akka Persistence可以帮你处理Actor消息的持久化存储,...Kafka使用Scala和Java进行编写。Apache Kafka是一个快速、可扩展的、高吞吐、可容错的分布式发布订阅消息系统。...Kafka具有高吞吐量、内置分区、支持数据副本和容错的特性,适合在大规模消息处理场景中使用。
温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star、Fork,纠错。 集群的使用方法 注释:本文描述了如何使用 Akka 集群。...一般来说,我们建议不要在不同的服务之间使用 Akka 集群和 Actor 消息传递,因为这会导致服务之间的代码耦合过紧,并且难以独立地部署这些服务,这是使用微服务架构的主要原因之一。...因此,业务内通信可以利用 Akka 集群的故障管理和 Actor 消息传递使用方便和性能优异的优点。...在不同的服务之间,「Akka HTTP」或「Akka gRPC」可用于同步(但不阻塞)通信,而「Akka Streams Kafka」或其他「Alpakka」连接器可用于集成异步通信。...Distributed Publish Subscribe 在集群中的 Actor 之间发布订阅消息,并使用 Actor 的逻辑路径发布点对点(point-to-point)消息,即发送方不必知道目标
---- Akka概述 Akka 是一个开源的并发、分布式、基于消息驱动的框架,用于构建高可伸缩性、可靠性和并发性强的应用程序。...插件和扩展:Akka 提供了丰富的插件和扩展机制,可以轻松集成其他库和框架,如 Akka HTTP、Akka Streams 等,以构建全栈应用程序。...下面看下Akka的特性: 可以更简单地构建并发和分布式系统 Akka基于Actor模型和Streams,让我们可以构建可伸缩的,并且可以高效使用服务器资源,使用多个服务器进行扩展的系统。...完全异步和基于流的HTTP服务器和客户端为构建微服务提供了一个很好的平台。...Actor模型允许构建分布式系统,不限于单个JVM内。 【Actor系统图】 使用消息传递避免锁和阻塞 Actor之间通信通过消息传递而不是方法调用,不会导致发送消息的调用线程被阻塞。
上面这段文字摘抄自 Akka 官网(akka.io),翻译成中文也就是:“Akka 是一个为 Java 和 Scala 构建高并发、分布式和弹性消息驱动应用程序的工具包”。...Actor 是一种程序上的抽象概念,被视为并发运算的基本单元:当一个 Actor 接收到一则消息,它可以做出一些决策、创建更多的 Actor 、发送更多的消息、决定要如何处理接下来的消息。...前面说了一大堆晦涩难懂的概念,相信大家看的也都云里雾里的。这里结合我自己的理解用白话文讲一下:其实 Actor 模型的设计思想就是事件驱动,可以简单理解为线程级的消息中间件。...akka-http:HTTP 组件,现代、快速、异步、流媒体优先的 HTTP 服务器和客户端。 akka-cluster:集群组件,包括集群成员管理、弹性路由等。...3.3 信息交互 完成 ActorSystem 的初始化和 Actor 的创建后,就可以正式使用 Akka 框架了。
在alpakka中,实际的业务操作基本就是在akka-streams里的数据处理(transform),其实是典型的CQRS模式:读写两方互不关联,写时不管受众是谁,如何使用、读者不关心谁是写方。...这里的写和读两方分别代表kafka里的producer和consumer。 本篇我们先介绍alpakka-kafka的producer功能及其使用方法。...ActorSystem只是为了读取.conf文件里的配置,还没有使用任何akka-streams组件。...下面我们示范一下sendProducer的使用和效果: import akka.actor.ActorSystem import akka.kafka.scaladsl....使用的是集合遍历,没有使用akka-streams的Source。为了检验具体效果,我们可以使用kafka提供的一些手工指令,如下: \w> .
在许多情况下,使用更明确和解耦的协议(如「HTTP」或「gRPC」)是更好的解决方案。...当向同一集群中运行的 Actor 发送消息时,不应使用ClusterClient。对于属于同一集群的 Actor,集群中的「分布式发布订阅」以更高效的方式提供与ClusterClient类似的功能。...使用集群客户端时,连接系统必须将其akka.actor.provider设置为remote或cluster。 接待员(receptionist)应该在集群中的所有节点或具有指定角色的所有节点上启动。...ClusterClient.Publish:消息将传递给所有已注册为命名主题订阅者的收件人 Actor。...值得注意的是,由于这些 Actor 的分布式特性,消息总可能丢失。一如既往,额外的逻辑应该在目标(确认)和客户端(重试)Actor 中实现,以确保至少一次的消息传递。
akka-cluster对每个节点的每种状态变化都会在系统消息队列里发布相关的事件。通过订阅有关节点状态变化的消息就可以获取每个节点的状态。...这部分已经在之前关于akka-cluster的讨论里介绍过了。由于akka-typed里采用了新的消息交流协议,而系统消息的发布和订阅也算是消息交换,也受交流协议约束。...所以想通过重写以前示范的ClusterMemberStatus来了解一下akka-typed环境下节点状态变化消息监听的一些机制。 我们需要一个actor来订阅系统发布的节点状态变化消息。...这里涉及到系统、actor两端的信息交流。假设向系统订阅是一种消息的发送,那么得到的节点状态变化消息就是系统的response了。...MonitorActor处理的消息类型是ClusterEvent。
Akka 中文指南的 GitHub 地址为「akka-guide」 跨多个数据中心集群 本章介绍如何跨多个数据中心、可用性zones或区域使用 Akka 集群。...为了避免这些问题,可以为每个数据中心运行一个单独的 Akka 集群,并使用数据中心之间的另一个通信通道,例如 HTTP、外部消息代理或集群客户端。...服务的外部 API 将是 HTTP、gRPC 或消息代理,而不是 Akka 远程处理或集群(参见 Lagom 框架文档中的其他讨论:内部和外部通信),但是在多个节点上运行的服务内部通信将使用普通的 Actor...当将此服务部署到多个数据中心时,如果内部通信无法使用普通的 Actor 消息传递,则会很不方便,因为它被分为几个 Akka 集群。...在内部使用 Actor 消息传递的好处是性能、易于开发和从 Actor 的角度对你的领域进行推理。
虽然Akka-http也提供对websocket协议的支持,但websocket的网络连接是双向恒久的,适合频繁的问答交互式服务端与客户端的交流,消息结构也比较零碎。...而我们面临的可能是批次型的大量数据库数据交换,只需要简单的服务端单向消息就行了,所以websocket不太合适,而Akka-http的SSE应该比较适合我们的要求。...SSE模式的基本原理是服务端统一集中发布消息,各客户端持久订阅服务端发布的消息并从消息的内容中筛选出属于自己应该执行的指令,然后进行相应的处理。...服务端是通过complete以SeverSentEvent类为元素的Source来进行SSE的,如下: import akka.http.scaladsl.marshalling.sse.EventStreamMarshalling...import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.client.RequestBuilding.Get
对于给定的一对 Actor,直接从第一个 Actor 发送到第二个 Actor 的消息将不会被无序接收,这一规则适用于使用基于 TCP 的 Akka 远程传输协议通过网络发送的消息。...这个方案的好处在于,事件只会被附加到存储中,不会发生任何变化;这样可以完美地复制和扩展这个事件流(event stream)的使用者(即,其他组件可能会使用事件流作为在不同区域复制组件状态或对更改作出反应的手段...这种传递是在尽最大努力的基础上进行的;它甚至可能在本地 JVM 中失败(例如,在 Actor 终止期间)。通过不可靠的网络传输发送的消息将丢失,而不会显示为死信。 应该用死信做什么?...Actor 可以订阅事件流上的类akka.actor.DeadLetter,请参阅「事件流」了解如何执行该操作。然后,订阅的 Actor 将收到(本地)系统中从那时起发布的所有死信。...死信不会在网络上传播,如果要在一个位置收集死信,则必须为每个网络节点订阅一个 Actor,然后手动转发它们。
在实际应用中,集群环境里共用一些数据是不可避免的。我的意思是有些数据可以在任何节点进行共享同步读写,困难的是如何解决更改冲突问题。...本来可以通过分布式数据库来实现这样的功能,但使用和维护成本又过高,不值得。分布式数据类型distributed-data (ddata)正是为解决这样的困局而设计的。...首先,共享数据结构是在各节点的replicator中构建的,数据更新时各节点程序把包嵌共享数据类型指定和对该数据更新方法函数的消息发送给本节点的replicator去更新并通过gossip协议向其它节点的...分布式数据读写是通过发送消息给本地的replicator来实现的。读写消息包括Update,Get,Delete。读取数据用Get,也可以订阅CRDT的更新状态消息Changed, Deleted。...赋予CRDT复制和免冲突特性的应该是replicator对Update这个消息的处理方式。
介绍 从Play2.5.x开始,Play使用Akka Streams实现流处理,废弃了之前的Enumerator/Iteratee Api。...根据官方文档描述,迁移至Akka Streams之后,Play2.5.x的整体性能提升了20%,性能提升相当可观。...结合Play和ReactiveMongo二者的流处理功能,我们可以很方便地实现完全异步非阻塞的报表导出功能。...实现 由于ReactiveMongo暂时还没有提供Akka Streams的流处理实现,所以无法直接通过map/flatMap直接返回一个Stream写回响应: @Singleton class TestStreamController...akka.actor.Status.Success(()) } } Ok.chunked(source) .withHeaders( "Content-Type
至于Message Router,则需要引入的Router对传入的消息作出智能判断,从而将消息传递给真正感兴趣的Subscriber。这就好像发布者同时发布了不同的刊物,订阅者只订阅自己喜欢的刊物。...AKKA提供的事件总线(Event Bus)可以看做是一种运用于特殊场景的消息总线,此时事件即为消息。...在AKKA中,Event Bus被定义为trait,定义了基本的订阅、取消订阅、发布等对应的方法,代码如下所示: trait EventBus { type Event type Classifier...官方文档的描述,Event为所有发布到该总线上的事件类型,Classifier是选择订阅者的分类器,Subscriber就是注册到该总线上的订阅者。...则AKKA的做法就是通过EventStream来进行订阅: class DeadLetterListener extends Actor { def receive = { case DeadLetter
alpakka-kafka-consumer的功能描述很简单:向kafka订阅某些topic然后把读到的消息传给akka-streams做业务处理。...所以一般来说我们会把topic订阅与consumer-group挂钩。...plainSource试试把前一篇示范中producer写入kafka的消息读出来: import akka.actor.ActorSystem import akka.kafka._ import...另一方面:如果在成功改变业务状态后再commit-offset,那么,一旦执行业务指令时发生异常而无法进行commit-offset,下次读取的位置将使用前一次的标注位置,就会出现重复改变业务状态的情况...另外,这个DrainingControl类型结合了Control类型和akka-streams终结信号可以有效控制整个consumer-streams安全终结。
通过上一篇文章,我们已经大致了解怎么使用 Akka,期待细致用法。这篇文章将介绍如何用 Akka-testkit 对 Akka 程序进行测试。...不同的文章有不同的说法,比如 http://rerun.me/2014/09/29/akka-notes-logging-and-testing/ 就把 Actor 测试需求分为:1)发送消息给 Actors...我个人认为,对于一个 Actor, 我们要测的有三个方面:1)Actor 接收消息之后,是否返回正确的消息,2)Actor 接收消息之后,是否正确地改变内部状态和执行内部行为,3)Actor 接收消息之后...首先将 testProbe 设置为被测 Actor 发出消息的目标,然后让被测 Actor 发出消息,再看 testProbe 是否接受到期望的消息。下面是一个示例。...Akka 系列系列文章 Akka 使用系列之一: 快速入门 Akka 使用系列之二: 测试 Akka 使用系列之三: 层次结构和容错机制 Akka 使用系列之四: Future
当然,人们仍然可以在学习和测试环境中使用Akka-Remoting来了解Akka的分布式运算机制和原理。Remoting和Cluster的明显分别之一就是真正实现了Actor的位置透明化。...简单来说Akka-Cluster将多个JVM连接整合起来,实现消息地址的透明化和统一化使用管理,集成一体化的消息驱动系统。...由于在单一机器上就可以配置多个节点形成一个集群,我们开发的分布式程序可以在单机或多机群上运行,不同的只是如何部署和配置集群环境。...一部物理机器上可以构建多个集群节点Node,这时它们有着相同的hostname和不同的port,在不同机器上的Node则可以使用不同的hostname和相同的port。...Seed-Node的主要作用是为申请加入集群的节点提供具体的联络地址,毕竟申请加入的节点需要一个具体的地址来发送申请加入消息,从这个方面来说:Seed-Node可以是集群中任何已知地址的节点。
中: akka.extensions = [ "akka.cluster.metrics.ClusterMetricsExtension" ] 简介 集群的成员节点可以收集系统健康指标,并在集群指标扩展的帮助下将其发布到其他集群节点和系统事件总线上注册的订阅者...如果启用了该功能,状态为「WeaklyUp」的集群成员将参与集群指标收集和分发。 指标收集器 指标集合委托给akka.cluster.metrics.MetricsCollector.的实现。...不同的收集器(collector)实现提供发布到集群的不同指标子集。当未设置Sigar时,某些消息路由和让其崩溃功能可能无法工作。...它可以配置为使用特定的MetricsSelector来产生概率,即a.k.a.权重: heap / HeapMetricsSelector - 已用和最大 JVM 堆内存。...它包含有关如何运行自适应负载平衡示例的说明,此示例的源代码也可以在「 Akka Samples Repository」中找到。 订阅指标事件 可以直接订阅指标事件来实现其他功能。
libraryDependencies是存储系统依赖的Key,该语句添加了一个ModuleID对象,"com.typesafe.akka"为groupID,"akka-actor_2.11"为artifactID...一般lib的官网中均会有写明自己的上述语句供使用者方便添加自己lib依赖。 三、并发编程 下面为大家介绍如何使用Scala进行并发编程。...是一个偏函数,用于接收并处理其他Actor发送的消息,这里就用到了模式匹配,可以根据不同的消息类型进行不同的处理,相当于路由。...由于Scala已经废弃了此种方式来进行并发编程,在这里也只是简单介绍,下面我们来看一下如何通过使用akka来进行并发编程。..." 4 } 5 } 四、总结 本文为大家简单介绍了scala基础、sbt简单操作、原生actor、akka的并发以及并行方式actor,这些是我在学习Geotrellis的过程中学习基础知识的一部分经验总结和梳理
领取专属 10元无门槛券
手把手带您无忧上云