Akka-http正是这么一套能高效解决以上问题的编程工具。Akka-http是一套支持Tcp传输标准及Http标准数据的编程工具。 ...Akka-http分别提供了服务端的Server-Side-Api和客户端的Client-Side-Api来帮助编程人员简化编程。两个Api都包括了对Http消息的构建、解析、传输帮助函数。...Akka-http应该正是为了这个人群而设计的。 Akka-http对Http消息的各组成部分进行了建模:用class来代表数据结构。...Uri的操作也是比较麻烦的,所以Akka-http也提供了Uri类型: /** * An immutable model of an internet URI as defined by http:/...由于Akka-http是基于Akka-stream功能之上的,它支持Http数据的流操作,也就是说它可以把一个Stream-Source放在Http消息的数据里,然后Akka-http的Client-Side-Api
值得庆幸的是akka-http已经提供了对缓存的支持,是基于java8 caffein的一套缓存操作工具包的。下面就介绍一下akka-http的caching。...akka-http caching 有个依赖: "com.typesafe.akka" %% "akka-http-caching" % akkaHttpVersion, 先从缓存存储结构开始,看看下面的一段缓存结构定义...我们来看看如何实现缓存管理: 在akka-http里可以用两种方式来实现缓存管理:1、直接用cache工具,2、用akka-http提供的Directive: cache, alwaysCache 我们先看看如何直接使用...producing a `Future[V]`. */ def getOrLoad(key: K, loadValue: K => Future[V]): Future[V] 跟着我们再试试用akka-http...} } } } } } ~ 好了,我觉着可能直接调用cache.getOrLoad会更好些,因为akka-http
在2017年我曾经写了一系列博客介绍akka-http,这里就不再叙述它的细节了。这篇我们只聚焦在解决当前问题上。...首先,用akka-http搭建一个http server框架: import akka.actor._ import akka.stream._ import akka.http.scaladsl.Http...akka-http的数据转换机制Marshaller/Unmarshaller是通过类型转换的隐式实例来实现的,akka-http提供了多个标准类型数据转换的隐式实例,如StringMarshaller...因为akka-http提供了implicit val StringMarshaller,所以在上面的例子里我可以直接写成: complete("hello world!")...这个也比较容易:akka-http本身支持json-streaming。
在有关CQRS系列博客里,我以akka-http作为系统集成工具的一种,零星地针对实际需要对http通信进行了介绍。...在restapi这个系列里我想系统化的用akka-http构建一套完整的,REST风格数据维护和数据交换api,除CRUD之外还包括网络安全,文件交换等功能。...我的计划是用akka-http搭建一个平台数据维护api的REST-CRUD框架,包含所有标配功能如用户验证、异常处理等。...akka-http是一套http程序开发工具。它的Routing-DSL及数据序列化marshalling等都功能强大。...这个在akka-http编程里主要体现在Routing-DSL的结构上,要求Route能够简洁易懂,如下: val route = path("auth") { authenticateBasic
Akka-http是一项系统集成工具。这主要依赖系统之间的数据交换功能。...Akka-http用Marshaller[A,B]类型来进行类型A的实例到类型B实例的转换。...Akka-http通过akka-http-spray-json模块直接支持由Spray-Json实现的Json读写工具库。...Akka-http的Json解决方案是典型的type-class模式:是一种可以即兴创建功能的类型继承模式(add-hoc polymorphism)。...我们把这个隐式实例置于当前可视域内即完成了与Akka-http的对接。
因为我了解Akka-http的主要目的不是为了有关Web-Server的编程,而是想实现一套系统集成的api,所以也需要考虑由服务端主动向客户端发送指令的应用场景。...虽然Akka-http也提供对websocket协议的支持,但websocket的网络连接是双向恒久的,适合频繁的问答交互式服务端与客户端的交流,消息结构也比较零碎。...而我们面临的可能是批次型的大量数据库数据交换,只需要简单的服务端单向消息就行了,所以websocket不太合适,而Akka-http的SSE应该比较适合我们的要求。...HttpResponse(200 OK,List(Server: akka-http/10.0.10, Date: Fri, 15 Dec 2017 05:50:52 GMT),HttpEntity.Strict...HttpResponse(200 OK,List(Server: akka-http/10.0.10, Date: Fri, 15 Dec 2017 05:51:02 GMT),HttpEntity.Strict
Akka-http的客户端Api应该是以HttpRequest操作为主轴的网上消息交换模式编程工具。我们知道:Akka-http是搭建在Akka-stream之上的。...所以,Akka-http在客户端构建与服务器的连接通道也可以用Akka-stream的Flow来表示。...{ req ⇒ HttpResponse(headers = headers.Connection("close") :: Nil) }, "akka.io", 80)(mat) Akka-http...10 // This idea came initially from this blog post: // http://kazuhiro.github.io/scala/akka/akka-http...10 // This idea came initially from this blog post: // http://kazuhiro.github.io/scala/akka/akka-http
当我们把Akka-http作为数据库数据交换工具时,数据是以Source[ROW,_]形式存放在Entity里的。很多时候除数据之外我们可能需要进行一些附加的信息传递如对数据的具体处理方式等。...我们可以通过Akka-http的raw-header来实现附加自定义消息的传递,这项功能可以通过Akka-http提供的raw-header筛选功能来实现。...} Akka-http通过Credential类的Directive提供了authentication和authorization。
曾经花了点时间研究了一下akka-http:当时我初选的所谓系统集成工具,它是通过json格式数据交换来集成系统的。json是个标准数据格式,所以可以实现异类系统之间的数据交换。...一直在考虑,如果SDP数据平台微服务之间是通过akka-http进行数据交换的形式实现集成的话,这个集成的体系内部交互效率会非常低,这是因为1、json是一种字符型的数据,占据空间较大,传输效率自然低。...实际上使用akka-http需要的门槛很高,即使akka-http已经提供了许多帮助http操作的类型,但光是理解http协议内容及httprequest,httpresponse细节、构建、使用方法就花去了我几个星期的精力
akka-http提供了一套功能强大,使用又很方便的Routing DSL。...这个是通过 ~ 操作符号实现的 在Akka-http的routing DSL里这些Route组合操作是通过Directive实现的。...Akka-http提供了大量现成的Directive,我们也可以自定义一些特殊功能的Directive,详情可以查询官方文件或者api文件。...Akka-http提供了所有22个TupleXX[L]的隐形实例。
在前面几篇讨论里我们都提到过:Akka-http是一项系统集成工具库。它是以数据交换的形式进行系统集成的。...Akka-http提供了许多网上传输标准数据的概括模型以及数据类型转换方法,可以使编程人员很方便的构建网上往来的Request和Response。...Akka-http是基于Akka-stream开发的:不但它的工作流程可以用Akka-stream来表达,它还支持stream化的数据传输。...简单来说:Akka-http的消息数据内容HttpEntity可以支持理论上无限长度的data-stream。...Akka-http的stream类型数据内容是以Source[T,_]类型表示的。
Unmarshalling是Akka-http内把网上可传输格式的数据转变成程序高级结构话数据的过程,比如把Json数据转换成某个自定义类型的实例。...Unmarshaller[String, T] type FromStrictFormFieldUnmarshaller[T] = Unmarshaller[StrictForm.Field, T] Akka-http...Unmarshaller[A, B] is available Unmarshaller[A, Option[B]], if an Unmarshaller[A, B] is available 也就是说Akka-http...Akka-http也提供了工具类型Unmarshal: object Unmarshal { def apply[T](value: T): Unmarshal[T] = new Unmarshal...]实际是Unmarshaller[T,B]的别名: type FromRequestUnmarshaller[T] = Unmarshaller[HttpRequest, T] 在上篇讨论我们介绍了Akka-http
我们说过Akka-http是一个好的系统集成工具,集成是通过数据交换方式实现的。Http是个在网上传输和接收的规范协议。...所以,在使用Akka-http之前,可能我们还是需要把Http模式的网上数据交换细节了解清楚。数据交换双方是通过Http消息类型Request和Response来实现的。...在Akka-http里我们把需要传输的数据转换成ByteString,通过网络发送給接收端、接收端再把收到消息Entity中的ByteString转换成目标类型的数据。...这两个转换过程就是Akka-http的Marshalling和Unmarshalling过程了。...我们知道Akka-http是基于Akka-Stream的,具备Reactive-Stream功能特性。下面我们就示范一下如何进行stream的上传下载。
在上期讨论我们提到过这种转换其实是ROW->Json->ByteString或者反方向的转换,在Akka-http里称之为Marshalling和Unmarshalling。...Akka-http的Marshalling实现采用了type-class编程模式,需要为每一种类型与Json的转换在可视域内提供Marshaller[A,B]类型的隐式实例。...Akka-http默认的Json工具库是Spray-Json,着重case class,而且要提供JsonFormat?(case-class),其中?...不过因为是Akka-http的配套库,在将来Akka-http的持续发展中具有一定的优势,所以我们还是用它来进行下面的示范。 下面就让我们开始写些代码吧。...但Akka-http的Marshalling-type-class是个非常复杂的系统。
Akka-http针对Connection的两头都提供了方便编程的Api,分别是Server-Side-Api和Client-Side-Api。通过这两个Api可以大大提高编程效率。...当然,上期我们提到过,Http-Server是Akka-http的核心部分,所有系统集成功能都是在Server-Side实现的。...Akka-http是基于Akka-stream编写的,所以我们需要从Akka-stream运算模式来理解Akka-http的类型表现形式。...Server对Socket的绑定在Akka-http里的可以Stream形式来表现: val serverSource: Source[Http.IncomingConnection, Future[Http.ServerBinding
这是在系统集成编程方面相对akka-http占优的一个亮点。protobuf格式数据可以很方便的转换成 json格式数据,支持对外部系统的的开放协议数据交换。...对akka-http用户来说,akka-grpc具有很大吸引(相对其它gRPC开放工具),因为它是基于akka-http的,看看下面grpc服务端的接口: // Bind service handler...binding.foreach { binding => println(s"gRPC server bound to: ${binding.localAddress}") } binding 上面这段代码不就是akka-http...那么可以想象得到如果需要支持http+rpc混合模式的应用,akka-grpc将会发挥很大作用,这也是akka-http下一步的发展趋势。...com.typesafe.akka" %% "akka-persistence-cassandra" % AkkaPersistenceCassandraVersion, "com.typesafe.akka" %% "akka-http
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...eagerly, avoiding useless laziness of Directive.addByNameNullaryApply } RejectionHandler.default是Akka-http
Akka-http routing DSL在Route运算中抛出的异常是由内向外浮出的:当内层Route未能捕获异常时,外一层Route会接着尝试捕捉,依次向外扩展。...Akka-http提供了ExceptionHandler类来处理Route运算产生的异常: trait ExceptionHandler extends ExceptionHandler.PF {...{ import directives.ExecutionDirectives._ // optimized as this is the root handler for all akka-http...但实际上Akka-http提供了默认的handler ExceptionHandler.default: /** * Creates a sealed ExceptionHandler from
Akka-http作为一种系统集成工具应该具备高效率的数据交换方式包括文件交换和数据库表行的上传下载。Akka-http的数据交换模式支持流式操作:代表交换数据可以是一种无限长度流的元素。...更重要的是:Akka-http还支持reactive-stream,可以避免由传输速率所产生的种种问题。在本篇我们讨论利用Akka-http进行文件的双向传递。
在上篇我们介绍了Akka-http Low-Level-Api。实际上这个Api提供了Server对进来的Http-requests进行处理及反应的自定义Flow或者转换函数的接入界面。...Akka-http提供了一套routing DSL作为High-Level-Api的主要组成部分。...这个是通过 ~ 操作符号实现的 在Akka-http的routing DSL里这些Route组合操作是通过Directive实现的。...Akka-http提供了大量现成的Directive,我们也可以自定义一些特殊功能的Directive,详情可以查询官方文件或者api文件。...Akka-http提供了所有22个TupleXX[L]的隐形实例。
领取专属 10元无门槛券
手把手带您无忧上云