在上篇我们介绍了Akka-http Low-Level-Api。实际上这个Api提供了Server对进来的Http-requests进行处理及反应的自定义Flow或者转换函数的接入界面。...我们看看下面官方文档给出的例子: import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.HttpMethods...Akka-http提供了一套routing DSL作为High-Level-Api的主要组成部分。...这个是通过 ~ 操作符号实现的 在Akka-http的routing DSL里这些Route组合操作是通过Directive实现的。...Akka-http提供了所有22个TupleXX[L]的隐形实例。
spray是个性能很好而且功能非常完整的service框架,包含很多组件,从底层http服务器到高层的rest路由DSL都有。一般简单的应用就使用和掌握好最高层的spray-routing就够用。...spray发布http service的流程如下: 整个流程由spray框架控制,http连接处理由spray-can或spray-servlet负责,大部分情况下,开发人员只要定义路由——url和业务服务的映射...——以及对应的业务服务即可,注意这个路由定义并不是一个配置文件,而是spray-routing定义的一套scala的DSL。...据spray-routing文档里说是为了”non-blocking"和"actor friendly",但实际上在spray的后续版本,也就是akka-http里把这个返回类型改成了RouteResult...但大部分时候我们可以用spray-routing通过一组Directive——翻译成中文就是指令——提供的路由DSL来定义我们的路由。这也是spray-routing提供的最核心的功能。
Dubbo 压测插件已开源,本文涉及代码详见 gatling-dubbo Gatling 是一个开源的基于 Scala、Akka、Netty 实现的高性能压测框架,较之其他基于线程实现的压测框架,Gatling...基于 AKKA Actor 模型实现,请求由事件驱动,在系统资源消耗上低于其他压测框架(如内存、连接池等),使得单台施压机可以模拟更多的用户。...全链路压测中我们主要模拟用户实际使用场景,使用 HTTP 接口作为压测入口,但有赞目前后端服务中 Dubbo 应用比重越来越高,如果可以知道 Dubbo 应用单机水位将对我们把控系统后端服务能力大有裨益...CheckBuild 则为 DSL 使用 Check 的辅助类 DSL Dubbo 插件的领域特定语言,我们提供了一套简单易用的 API 方便编写 Duboo 压测脚本,风格上与原生 HTTP DSL...check 方法 DSL trait AwsDsl提供顶层 DSL。
花了几天时间研究了一下Akka官方网站上的资料,先在这里把了解的情况在下面做个小结: Akka程序是由多个Actor组成的。...还有一套领域特定语言DSL,是一种独立的编程模式,即Actor编程模式了。...除了普通功能的Actor之外,Akka还提供了几种具有特殊功能的Actor,包括:路由(routingActer)、有限状态机(FSMActor)、持久式(persistenceActor)。...初步打算下面的主攻方向是基于persistenceActor的ES模式数据库应用和基于Actor-http的Microservice工具库。...当然,这些还是需要对Akka进行详细的研究学习后才能有所定论。 刚好,发现在网上的基于scala的Akka讨论示范并不多,那在下面一段时间的讨论里我们就开始从头学习Akka吧。。。
在有关CQRS系列博客里,我以akka-http作为系统集成工具的一种,零星地针对实际需要对http通信进行了介绍。...akka-http是一套http程序开发工具。它的Routing-DSL及数据序列化marshalling等都功能强大。...这个在akka-http编程里主要体现在Routing-DSL的结构上,要求Route能够简洁易懂,如下: val route = path("auth") { authenticateBasic...._ import akka.stream._ import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives._...然后用下面的客户端测试代码: import akka.actor._ import akka.stream._ import akka.http.scaladsl.Http import akka.http.scaladsl.model.headers
Route 是Akka-http routing DSL的核心部分,使用户能比较方便的从http-server的角度筛选http-request、进行server运算、构建回复的http-response...Akka-http是通过在运行Route时用Route.seal(route)的方式来确保所有rejection在最终都会得到处理: override def seal(system: ActorSystem...{ import directives.ExecutionDirectives._ // optimized as this is the root handler for all akka-http...._ import akka.http.scaladsl.Http import akka.http.scaladsl.model._ import akka.http.scaladsl.server...._ import akka.http.scaladsl.server.Directives._ import akka.stream._ import akka.stream.scaladsl._ import
带路由组的路由器示例 让我们来看看如何将集群感知路由器与一组路由(即发送到路由器路径的路由)一起使用。 示例应用程序提供了一个计算文本统计信息的服务。...最简单的运行路由器示例的方法是下载「Akka Cluster Sample with Java」,它包含有关如何使用路由组运行路由器示例的说明。...此示例的源代码也可以在「Akka Samples Repository」中找到。...「Akka Cluster Sample with Java」,它包含有关如何使用远程部署路由池运行路由器示例的说明。...此示例的源代码也可以在「Akka Samples Repository」中找到。 ---- 英文原文链接:Cluster Aware Routers.
Akka-http routing DSL在Route运算中抛出的异常是由内向外浮出的:当内层Route未能捕获异常时,外一层Route会接着尝试捕捉,依次向外扩展。...Akka-http提供了ExceptionHandler类来处理Route运算产生的异常: trait ExceptionHandler extends ExceptionHandler.PF {...但实际上Akka-http提供了默认的handler ExceptionHandler.default: /** * Creates a sealed ExceptionHandler from...} } } 下面是本次讨论中的示范源代码: import akka.actor._ import akka.http.scaladsl.Http import akka.http.scaladsl.model...._ import akka.http.scaladsl.server._ import akka.http.scaladsl.server.Directives._ import akka.stream
的轻量级REST/HTTP工具包。...除了基于角色的非阻塞IO实现外,Spray还提供了强大的路由库spray-routing。...一个典型的ElasticMQ route示例如下所示: val listQueuesDirective = action("ListQueues") { rootPath {...如何使用路由中的队列角色(queue actors)来完成HTTP请求? 关于Spray的RequestContext好处是,它所做的只是将一个实例传递给你的路由,不需要任何回复。...完全放弃请求或使用某个value完成该请求仅仅取决于它的路由。该请求也可以在另一个线程中完成 - 或者,例如,在未来某个线程运行完成时。这正是ElasticMQ所做的。
akka-http提供了一套功能强大,使用又很方便的Routing DSL。...这个是通过 ~ 操作符号实现的 在Akka-http的routing DSL里这些Route组合操作是通过Directive实现的。...Akka-http提供了大量现成的Directive,我们也可以自定义一些特殊功能的Directive,详情可以查询官方文件或者api文件。...complete(s"Received ${m.name} request for order $id") } 我们可以从上面这些示范例子得出结论:Directive的组合能力是routing DSL...Akka-http提供了所有22个TupleXX[L]的隐形实例。
Akka-http正是这么一套能高效解决以上问题的编程工具。Akka-http是一套支持Tcp传输标准及Http标准数据的编程工具。 ...Server-Side-Api还包括了一套DSL以方便Http-Server功能编程。 ...由于Akka-http是基于Akka-stream功能之上的,它支持Http数据的流操作,也就是说它可以把一个Stream-Source放在Http消息的数据里,然后Akka-http的Client-Side-Api...不过Streaming功能只能在Akka-http-Api内实现。但用Akka-http-Server-Side-Api也可以很方便的实现标准Rest服务使其它异类系统可以顺利调用。...._ import akka.http.scaladsl.model._ import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives
1.1.1版直接使用akka发布http服务,而无需spray便少了很多冲突的可能性。...= Seq( "com.typesafe.akka" %% "akka-actor" % akkaActorVersion, "com.typesafe.akka" %% "akka-http-core..." % akkaHttpVersion, "com.typesafe.akka" %% "akka-http" % akkaHttpVersion, "com.typesafe.akka" %%...Http().bindAndHandle(routes, host, port) 其中host为本机ip,port为服务端口,而routes则为你定义的路由规则。...定义方式如下: import akka.http.scaladsl.model.
当未设置Sigar时,某些消息路由和让其崩溃功能可能无法工作。...它使用随机选择的路由,概率来自于相应节点的剩余容量。...让我们来看看这台正在运行的路由器。还有什么比计算阶乘(factorial)更苛刻的呢?...,其他事物的工作方式与其他路由器相同。...它包含有关如何运行自适应负载平衡示例的说明,此示例的源代码也可以在「 Akka Samples Repository」中找到。 订阅指标事件 可以直接订阅指标事件来实现其他功能。
请注意,同样的提示也适用于管理 Akka 中任何地方的阻塞操作,包括流、HTTP 和其他构建在其上的响应式库。...在上面的示例中,我们通过向阻塞 Actor 发送数百条消息来加载代码,这会导致默认调度器的线程被阻塞。...有关 Akka HTTP 的类似讨论,请参阅「Handling blocking operations in Akka HTTP」。...阻止操作的可用解决方案 针对“阻塞问题”的充分解决方案的非详尽清单包括以下建议: 在由路由器管理的 Actor(或一组 Actor)内执行阻塞调用,确保配置专门用于此目的或足够大的线程池。...一种常见的模式是为N个 Actor 创建一个路由器,每个 Actor 包装一个 DB 连接,并处理发送到路由器的查询。
import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model....,因为还没有实现,所以让我们定义我们的路由: Routes.scala package com.fm.mylibrary.producer import akka.http.scaladsl.server.Directives...它扩展了提供主要方法的特征scala.App,所以你可以执行这个类,它将启动一个提供定义路由的http服务器。...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO的示例和信息。...另一方面,Scala协议没有很好的文档记录,因此设置复杂测试会很有挑战性,而我发现的唯一方法是浏览它的示例和源代码。
如果希望执行SQL语句来操作数据库,那么运用相对广泛的是框架ScalikeJDBC,它提供了非常简单的API接口,甚至提供了SQL的DSL语法。...对于分布式的支持,绝对绕不开的框架还是AKKA。它产生的影响力如此之大,甚至使得Scala语言从2.10开始,就放弃了自己的Actor模型,转而将AKKA Actor收编为2.10版本的语言特性。...我在项目中主要将Spray作为REST框架来使用,并结合AKKA来处理领域逻辑。Spray处理HTTP请求的架构如下图所示: ?...Spray提供了一套DSL风格的path语法,能够非常容易地编写支持各种HTTP动词的请求。...Spray对HTTP请求的内部处理机制实则是基于Akka-IO,通过IO这个Actor发出对HTTP的bind消息。例如: IO(Http) !
保持访问 因为历史原因,访问搜索集群的方式多种多样,有通过原生DSL访问的,也有通过内部封装的业务协议请求的,甚至还有不同版本的协议样式。...业务层 上游业务可以使用rest风格的http协议、原生es http client或者通过我们封装的search-client调用搜索中间件,当然也可以支持监控任务或者开发、运维通过管理接口管理集群配置或者采集统计数据...为结构化的查询请求,这里还有几个问题需要处理: 异步io,在高吞吐的中间件支持异步调用是必要的,可以使用netty或者akka等异步通信框架 并发模型,io和业务处理异步化 上下文管理,多线程处理之后需要考虑请求中的特殊标记在线程间传递...client,如果有多个版本 es 集群存在,可以考虑直接通过http client封装,可以更加方便的控制DSL拼接,也适合对 client 连接池的管理和监控。...查询优化器最后还需要将条件组合为具体的DSL。 中间层- query router 这部分负责路由转发,非拆分索引和只有单路由规则的拆分索引可以根据索引名选择对应的客户端连接发送请求即可。
在不同的服务之间,「Akka HTTP」或「Akka gRPC」可用于同步(但不阻塞)通信,而「Akka Streams Kafka」或其他「Alpakka」连接器可用于集成异步通信。...此示例的源代码可以在「Akka Samples Repository」中找到。...它包含有关如何运行Worker Dial-in Example示例的说明。此示例的源代码可以在「Akka Samples Repository」中找到。...当一个节点无法访问或离开集群时,该节点的routees将自动从「路由」中注销。当新节点加入集群时,会根据配置向路由添加额外的routees。 详见「Cluster Aware Routers」。...管理 HTTP HTTP API 提供了集群的信息和管理。详见「Akka Management」。 JMX 集群的信息和管理以根名称akka.Cluster的 JMX MBeans 提供。
在ActorSystem基础上,Akka也提供了一些配套的组件,比如持久化,Http服务,网络服务等,他们都是构建高可用分布式应用不可或缺的部分,基本架构体系和周边产品如图1-4所示。 ?...Akka自带多种邮箱类型,也提供自定义邮箱的接口。 路由(Routing) 消息除了通过普通的Actor发送之外,也可以通过路由进行发送。...当通过路由发送消息时,我们可以根据需求来选择不同的路由策略,比如轮询、广播等。 持久化(Persistence) 任何程序都可能有失败的可能,即便是JVM如此强大稳定的平台也都一样。...HTTP模块 Akka提供了简单易用的Http模块,支持完整的Http服务端与客户端开发,可以帮助我们快速构建性能极强的Rest Web服务。...相关开源项目 Akka具有高性能、可扩展、设计友好等诸多优点,非常被适合用来作为分布式应用的基础框架,而且由于对Http有非常好的支持,也让它在web服务领域占有一席之地。
本文推荐这两篇的文章的原因在于,Paypal的文章在架构细节上并未提及太多,大多是在他们选择Akka的原因,以及迁移到Akka上的好处。...对网络和路由选择架构造成很大压力: 随着各项服务趋于互联化,请求经过重重传递之后会造成延迟增加、用户体验下降的后果。...规模越大,成本越高昂: 由数百台虚拟机联合提供的服务,由于管理、监控以及无效缓存的问题,势必会造成昂贵的开销。 规模越小,敏捷性越高: 跨越数百台虚拟机部署服务需要花费很长的时间。...PayPal选择了Akka而不是Erlang的原因在于,他们在Java方面的经验更丰富,而Akka正是运行在Java之上的。对于很多人来说,从头学习Erlang并不合适。...PayPal的文章还提及了程序员在适应Akka代码的非线性本质时所遇到的困难,因此在采用这类系统时,所雇人员必须能够适应Akka/Scala培训。