值得庆幸的是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...最好能拿个例子来示范解释:刚好手头有个获取用户信息的http请求样板: val route = pathPrefix(pathName) { pathPrefix("getuserinfo...我们来看看如何实现缓存管理: 在akka-http里可以用两种方式来实现缓存管理:1、直接用cache工具,2、用akka-http提供的Directive: cache, alwaysCache 我们先看看如何直接使用...这两个是同一个东西,只是cache多了个是否使用缓存这么个控制,是通过request-header Cache-Control来实现的,如:Cache-Control`(`no-cache`)。
研究关于restapi的初衷是想搞一套通用的平台数据表维护http工具。前面谈过身份验证和使用权限、文件的上传下载,这次来到具体的数据库表维护。...akka-http强大的功能,如streaming。...._ import akka.http.scaladsl.Http import spray.json.DefaultJsonProtocol import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport...import akka.http.scaladsl.marshalling._ import akka.http.scaladsl.model._ import akka.stream.ActorMaterializer...._ import akka.stream._ import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives._
这种模式首先解决了纯Http大数据通过Multipart传输所必须进行的数据分段操作和复杂的消息属性设定等需要的技术门槛,再者用户还可以很方便的使用Akka-stream对数据进行深度处理,免去了数据转换的麻烦...更重要的是:Akka-http还支持reactive-stream,可以避免由传输速率所产生的种种问题。在本篇我们讨论利用Akka-http进行文件的双向传递。 ...由于我们的目的是大型的文件交换,所以无论上传下载都使用了withoutSizeLimit: val route = pathPrefix("file") { (get & path("exchange...._ import akka.stream._ import akka.stream.scaladsl._ import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives...._ import akka.stream._ import akka.stream.scaladsl._ import akka.http.scaladsl.Http import akka.http.scaladsl.model.HttpEntity.limitableByteSource
顺便提一下:普通大型文本文件也可以用二进制blob方式存入MongoDB,因为文件在http传输过程中必须以byte方式进行,所以后台httpserver接收的文件格式是一串byte,不用任何格式转换就可以直接存入...如: http://192.168.0.189:50081/private/crud/person http://192.168.0.189:50081/private/crud/person?...akka.http.scaladsl.Http import akka.http.scaladsl.marshalling._ import akka.http.scaladsl.model._ import...import akka.http.scaladsl.marshalling.Marshal import akka.http.scaladsl.model._ import akka.http.scaladsl.Http...._ import akka.stream._ import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives._
2、路由前缀 和 Laravel 路由一样,gorilla/mux 路由也支持路由前缀: r.PathPrefix("/hello").HandlerFunc(sayHelloWorld) 不过,路由前缀通常不会单独使用...除了请求头之外,还可以通过 Queries 方法限定查询字符串,比如下面这个示例,查询字符串必须包含 token 且值为 test 才可以匹配到给定路由 /query/string: r.HandleFunc...6、路由分组 作为路由匹配进阶使用教程的收尾,我们来看下如何在 gorilla/mux 路由中实现路由分组和命名,以及根据命名路由生成对应的 URL。...在 gorilla/mux 中,可以基于子路由器(Subrouter)来实现路由分组的功能,具体使用时,还可以借助前面介绍的路由前缀和域名匹配来对不同分组路由进行特性区分。...7、路由命名 最后我们来看一下 gorilla/mux 中的路由命名,和 Laravel 路由命名一样,也是通过 Name 方法在路由规则中指定: postRouter := r.PathPrefix
对一个商品提出n个存写请求,同一个商品编号,系统对每张图片自动产生序号并在httprespose中返回给客户端。...如: http://example.com:50081/public/gms/pictures?pid=apple&width=128 图片放在HttpRequest的Entity里面。...图片读取请求分两步:先提供pid获取一个不含图片的记录清单(注意Model里WebPic的fromDocument函数里pic=None),返还用户,如:http://example.com:50081...._ import akka.http.scaladsl.model._ import akka.http.scaladsl.coding.Gzip import com.datatech.rest.mongo.MongoModels.WebPic...._ import akka.stream._ import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives._
这个所谓的数据中台的主要作用是为整体系统提供一套统一的数据使用api,前后连接包括web,mobile,desktop的前端系统以及由多种传统及分布式数据库系统,形成一个统一的数据使用接口。...这是个akka-cluster-sharding模式。数据中台api是向所有内部系统以及一些特定的外部第三方系统开放的,用http标准协议支持各系统与数据后台的连接也是合理的。...这个akka-http, akka-grpc可以胜任。然后各系统之间的集成可以通过一个流运算工具如kafka实现各聚合根之间的交互连接。 似乎所有需要的工具都齐备了,其中akka占了大部分功能。...在我看来:服务接入方面由于涉及身份验证、使用权限、二进制文件类型数据交换等使用akka-http,akka-grpc会更有控制力。...都会自动在某个节点上构建一个新的entity,如果上万个用户使用过某个功能,那么就会有万个entity及其所占用的资源如mongodb客户端等停留在内存里。
Route 是Akka-http routing DSL的核心部分,使用户能比较方便的从http-server的角度筛选http-request、进行server运算、构建回复的http-response...一般来说:当一个筛选功能的Directive如get遇到一个不符合筛选条件的request时,它会拒绝reject这个request进入下一层Route。...整个过程中的这些rejection事件会被记录下来最后由某个隐式或明式的RejectionHandler实例把这组rejection转化成HttpResponse返回用户。...._ 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提供了比较完整的开发技术支持。我在上一个系列有关CQRS的博客中按照实际应用的要求对akka的一些开发技术进行了介绍。CQRS模式着重操作流程控制,主要涉及交易数据的管理。...在有关CQRS系列博客里,我以akka-http作为系统集成工具的一种,零星地针对实际需要对http通信进行了介绍。...akka-http是一套http程序开发工具。它的Routing-DSL及数据序列化marshalling等都功能强大。...: package com.datatech.restapi import akka.actor._ import akka.stream._ import akka.http.scaladsl.Http...然后用下面的客户端测试代码: import akka.actor._ import akka.stream._ import akka.http.scaladsl.Http import akka.http.scaladsl.model.headers
akka-http是以akka-stream为核心的,使用了大量的akka-stream功能。...自带了ByteString的Marshaller,可以实现数据格式自动转换,在网络传输中不需要增加什么数据格式转换动作。...import akka.http.scaladsl.marshalling.Marshal import akka.http.scaladsl.model._ import akka.http.scaladsl.Http...import akka.http.scaladsl.model._ import akka.http.scaladsl.server.Route import akka.http.scaladsl.Http...import akka.http.scaladsl.marshalling.Marshal import akka.http.scaladsl.model._ import akka.http.scaladsl.Http
在我们这里的情况就是:以前一堆c#、sqlserver的东西必须保留,新的功能比如大数据、ai、识别等必须用新的手段如scala、python、dart、akka、kafka、cassandra、mongodb...下面是SqlHttpServer.scala的代码: package com.datatech.rest.sql import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives...import akka.stream.ActorMaterializer import akka.http.scaladsl.model._ import akka.actor.ActorSystem...所以我们可以通过传递字符串型的sql语句来实现服务调用,使用门槛低,方便通用。restapi-sql提供的是对服务器端sqlserver的普通操作,包括读get,写入post,更改put。...接受一条或者多条无参数sql指令,多条指令会在一个事物中执行。
一个Intent Filter中可声明多个action,Intent中的action与其中的任一个action在字符串形式上完全相同(注意,区分大小写,大小写不同但字符串内容相同也会造成匹配失败),action...这里主要说的区别是 path、pathPrefix、pathPattern 之间的区别: · path 用来匹配完整的路径,如:http://example.com/blog/abc.html,...这里将 path 设置为 /blog/abc.html 才能够进行匹配; · pathPrefix 用来匹配路径的开头部分,拿上来的 Uri 来说,这里将 pathPrefix 设置为 /blog...匹配符号: 1. “*” 用来匹配0次或更多,如:“a*” 可以匹配“a”、“aa”、“aaa”... 2. “.” 用来匹配任意字符,如:“.”...可以匹配“a”、“b”,“c”... 3. 因此 “.*” 就是用来匹配任意字符0次或更多,如:“.
在上篇我们介绍了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...在对应的过程中可能还会按request要求进行一些Server端的运算作为例如Rest-Api这样的服务。不过对于大型的服务,模式匹配方式就会显得篇幅臃肿及模式僵化。...} } 在上期讨论的例子里我们可以这样使用route: val futBinding: Future[Http.ServerBinding] = connSource.to {...Akka-http提供了所有22个TupleXX[L]的隐形实例。
akka-http提供了一套功能强大,使用又很方便的Routing DSL。...get、path、pathSingleSlash等都是Directive, 如: def path[L](pm: PathMatcher[L]): Directive[L] = pathPrefix...这个是通过 ~ 操作符号实现的 在Akka-http的routing DSL里这些Route组合操作是通过Directive实现的。...Akka-http提供了大量现成的Directive,我们也可以自定义一些特殊功能的Directive,详情可以查询官方文件或者api文件。...Akka-http提供了所有22个TupleXX[L]的隐形实例。
一般情况下,在开发Web应用程序的时候,从模型和流程定义开始,深入到软件开发中,都是使用TDD(测试驱动开发)方法:先写测试,考虑我们真正想要的,以及我们如何使用它; 但微服务(microservices...生产者特定的依赖关系仅用于数据库支持,如您所见,我使用H2(在内存数据库中),但您可以轻松地将其替换为其他数据库支持。...同时考虑到所有HTTP元素必须匹配(方法,url,标题,正文和查询) 用于验证消费者契约的实际测试的定义: 此代码将针对以前的方案运行,虚拟服务器将响应 交互部分中定义的唯一HTTP请求(如果响应为deined...另外,我总是建议采用增量方法(即使是小型项目),所以在这种情况下,我们可以构建一个服务器来公开一个API并返回两个类别的静态列表(如Pact文件中定义的),然后添加配置支持,数据库支持,迁移支持等。...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO的示例和信息。
二、升级过程 从1.0版升级到1.1.1版变化不是非常大,主要是以下几个方面的变化: 2.1 废弃spray,改用akka发布http服务 之前geotrellis的习惯方式是使用...1.1.1版直接使用akka发布http服务,而无需spray便少了很多冲突的可能性。...= Seq( "com.typesafe.akka" %% "akka-actor" % akkaActorVersion, "com.typesafe.akka" %% "akka-http-core...定义方式如下: import akka.http.scaladsl.model....从这一点也能看出CollectionLayerReader不再使用Spark调用瓦片,而是直接调用Accumulo或其他数据库中的瓦片数据,所以返回的不再是RDD集合。
不知怎么搞的,我尽然在这段代码中间使用了Await.result。从OOP角度分析这很容易理解,下一段程序需要上一段程序的结果来继续运行。...在函数式编程模式里,阶段性的运算结果是在包嵌在Monad中的。Monad本身只是一个运算计划,只有真正运算时才能获取结果。Monad本身是函数组件,可以实现多个Monad的函数组合。...err) } } } } } MongoRoute.scala package com.datatech.rest.mongo import akka.http.scaladsl.server.Directives...._ import akka.http.scaladsl.model._ import akka.http.scaladsl.coding.Gzip import akka.stream.scaladsl...(pathName) { pathPrefix("pictures") { (post & parameters('pid,'desc.?
mux有以下优势: 实现了标准的http.Handler接口,所以可以与net/http标准库结合使用,非常轻量; 可以根据请求的主机名、路径、路径前缀、协议、HTTP 首部、查询字符串和 HTTP 方法匹配处理器...注意到路径/books/{isbn}使用了变量,在{}中间指定变量名,它可以匹配路径中的特定部分。...从上面的使用过程中可以看出,mux库非常轻量,能很好的与标准库net/http结合使用。 我们还可以使用正则表达式限定变量的模式。...,我将登录的用户名和密码组合成username=xxx&password=xxx形式的字符串,对这个字符串进行base64编码,然后设置到 Cookie 中。...它支持丰富的请求匹配方法,子路由能极大地方便我们管理路由。由于兼容标准库net/http,所以可以无缝集成到使用net/http的程序中,利用为net/http编写的中间件资源。
mux有以下优势: 实现了标准的http.Handler接口,所以可以与net/http标准库结合使用,非常轻量; 可以根据请求的主机名、路径、路径前缀、协议、HTTP 首部、查询字符串和 HTTP 方法匹配处理器...注意到路径/books/{isbn}使用了变量,在{}中间指定变量名,它可以匹配路径中的特定部分。...自定义的匹配器就是一个类型为func(r *http.Request, rm *RouteMatch) bool的函数,根据请求r中的信息判断是否能否匹配成功。...,我将登录的用户名和密码组合成username=xxx&password=xxx形式的字符串,对这个字符串进行base64编码,然后设置到 Cookie 中。...它支持丰富的请求匹配方法,子路由能极大地方便我们管理路由。由于兼容标准库net/http,所以可以无缝集成到使用net/http的程序中,利用为net/http编写的中间件资源。
path:访问的路径,String pathPrefix:访问的路径的前缀,String pathPattern:访问路径的匹配格式,相对于path和pathPrefix更为灵活,String mimeType...与host不可同时使用;mimeType可以不设置,如果设置了,跳转的时候必须加上mimeType,否则不能匹配到Activity。...> http-equiv="Content-Type" content="text/html; charset=utf-8"> http-equiv="Content-Style-Type...这个时候我们需要回顾一下action和category的用法: 首先需要尝试匹配action,action匹配成功了之后,才会继续匹配设置的category,所以单独匹配category是没有任何效果的...id=*" android:scheme="lzp" /> 之前已经说过,pathPattern不能和host同时使用,所以我们只能删除host,pathPattern匹配的是整个Uri,这样我们还可以指定多个参数
领取专属 10元无门槛券
手把手带您无忧上云