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

Akka(33): Http:Marshalling,to Json

Akka-http网上交换数据转换代表把一个高级结构类型T的实例转换成简单的目标类型MessageEntity,它代表http消息的数据部分(entity-body),最后产生Json进行交换。...Akka-http用Marshaller[A,B]类型来进行类型A的实例到类型B实例的转换。...⇒ f(marshal())) def toOpaque(charset: HttpCharset): Marshalling[A] = this } } 我们可以在Marshalling类型里对消息内容类型...这个可网上传输的消息是通过Json、XML这样的数据描述语言来产生具体数据的。Akka-http通过akka-http-spray-json模块直接支持由Spray-Json实现的Json读写工具库。...Akka-httpJson解决方案是典型的type-class模式:是一种可以即兴创建功能的类型继承模式(add-hoc polymorphism)。

2K100

Akka(40): Http:Marshalling reviewed - 传输数据序列化重温

上篇我们讨论了Akka-http的文件交换。由于文件内容编码和传输线上数据表达型式皆为bytes,所以可以直接把文件内容存进HttpEntity中进行传递。...在Akka-httpT->MessageEntity转换是通过Marshaller[T,MessageEntity]实现的,Marshaller类型定义如下: sealed abstract class...Akka-http自带的Json解决方案用的是Spray-Json,下面我们就用Spray-Json来实现转换: import akka.http.scaladsl.marshallers.sprayjson...从上面的讨论我们对任意结构类型的一个实例进行序列化转换有了一定了解。这个类型的实例可以被是作为数据库的一条记录,通过上面讨论的方式在服务端和客户端进行交换。...但它的伴生对象包含了对任何类型ToResponseMarshallable的隐式实例,所以complete能够通过编译。

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

restapi(8)- restapi-sql:用户自主的服务

在我们这里的情况就是:以前一堆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...import com.datatech.rest.sql.Repo.JDBCRepo import akka.http.scaladsl.common._ import spray.json.DefaultJsonProtocol...实际上,http线上数据交换本身就不可能是强类型的,因为经过了json转换。对于json转换来说,只要求字段名称、字段类型对称就行了。至于从什么类型转换成了另一个什么类型都没问题。

1.4K10

Akka(34): Http:Unmarshalling,from Json

Unmarshalling是Akka-http内把网上可传输格式的数据转变成程序高级结构话数据的过程,比如把Json数据转换成某个自定义类型的实例。...按具体流程来说就是先把Json转换成可传输格式数据:MessageEntity,HttpRequest,HttpReponse等,然后再转换成程序高级结构数据classXX实例。...A代表网上可传输类型MessageEntity、HttpRequest,B代表某种程序高级数据类型。因为A到B的转换是non-blocking的,所以可以立即返回Future类型结果。...Akka-http按被转换对象类型分类命名了下面这些类型别名: type FromEntityUnmarshaller[T] = Unmarshaller[HttpEntity, T] type FromMessageUnmarshaller...Unmarshalling可以直接进行Json到自定义类型之间的转换,: val route = (path("User") & post) { entity(as[User]){ user =>

76170

Akka-CQRS(11)- akka-http for http-web-service: Marshalling-数据序列化

在POS控制平台例子里不会涉及到POST操作,应该全部是GET类型的,http://192.168.11.189:2588/pos/logon?...akka-http的数据转换机制Marshaller/Unmarshaller是通过类型转换的隐式实例来实现的,akka-http提供了多个标准类型数据转换的隐式实例,StringMarshaller...Entity.dataBytes的数据类型是由Entity.contentType指明的: object ContentTypes { val `application/json` = ContentType...spray-jsonakka-http自带默认的一个json工具库,它提供了通用的针对任何类型T的Marshaller/Unmarshaller: ToEntityMarshaller[T] 和 FromEntityUnmarshaller...还有一项需求是在Reponse里返回一个数据流(多条数据),当前交易项目清单。这个也比较容易:akka-http本身支持json-streaming。

61260

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

", // Akka HTTP项目的标准依赖关系 "com.typesafe.akka" %% "akka-http-spray-json" % "10.0.11", // 用于JSON序列化和反序列化...生产者特定的依赖关系仅用于数据库支持,您所见,我使用H2(在内存数据库),但您可以轻松地将其替换为其他数据库支持。...另外,我总是建议采用增量方法(即使是小型项目),所以在这种情况下,我们可以构建一个服务器来公开一个API并返回两个类别的静态列表(Pact文件定义的),然后添加配置支持,数据库支持,迁移支持等。...还有其他类似的库,Argonaut和JSON4S,可以按你想法评估所有这些库,并选择最适合您需求的库。 如果我们再次执行测试,我们现在应该得到一条绿线。再次,添加更多的测试,以涵盖每一个案例。...您可以在官方文档中找到更多关于如何在Slick实现实体和DAO的示例和信息。

7.5K50

Akka(35): Http:Server side streaming

但是,现实的数据交换远远不止针对request和response操作能够满足的。系统之间数据交换经常涉及文件或者数据库表类型的数据上传下载。...虽然在Http标准描述了如何通过MultiPart消息类型进行批量数据的传输,但是这个标准涉及的实现细节包括数据内容描述、数据分段方式、消息数据长度计算等等简直可以立即令人却步。...简单来说:Akka-http的消息数据内容HttpEntity可以支持理论上无限长度的data-stream。...Akka-http的stream类型数据内容是以Source[T,_]类型表示的。...首先,Akka-stream通过FileIO对象提供了足够多的file-io操作函数,其中有个fromPath函数可以用某个文件内容数据构建一个Source类型: /** * Creates a

80150

Akka-CQRS(14)- Http标准安全解决方案:OAuth2-资源使用授权

用户身份和令牌的传递是通过Http Header实现的,具体情况可参考RFC2617,RFC6750 简单来说:用户向服务器提交身份信息申请令牌,下面是一个HttpRequest样例: POST /token...得到令牌后每个使用网络资源的Request都必须在Authorization类Header里附带这个令牌,: GET /resource HTTP/1.1 Host: server.example.com...下面我们写一段客户端代码来测试上面这个webserver的功能: import akka.actor._ import akka.stream._ import akka.http.scaladsl.Http...% "jwt-core" % "3.0.1", "de.heikoseeberger" %% "akka-http-json4s" % "1.22.0", "org.json4s" %% "json4s-native..." % "3.6.1", "com.typesafe.akka" %% "akka-http-spray-json" % "10.1.8", "com.typesafe.scala-logging

57210

Akka(31): Http:High-Level-Api,Route rejection handling

Route 是Akka-http routing DSL的核心部分,使用户能比较方便的从http-server的角度筛选http-request、进行server运算、构建回复的http-response...一般来说:当一个筛选功能的Directiveget遇到一个不符合筛选条件的request时,它会拒绝reject这个request进入下一层Route。...整个过程的这些rejection事件会被记录下来最后由某个隐式或明式的RejectionHandler实例把这组rejection转化成HttpResponse返回用户。...all other types of responses } 下面是一个比较全面的RejectionHandle应用示范: akka.actor._ import akka.http.scaladsl.Http...import akka.http.scaladsl.model._ import akka.http.scaladsl.server._ import akka.http.scaladsl.server.Directives

91470

Akka(41): Http:DBTable-rows streaming - 数据库表行交换

因为文件内容是以一堆bytes来表示的,而http消息的数据部分也是byte类型的,所以我们可以直接用Source[ByteString,_]来读取文件然后放进HttpEntity。...Akka-http的Marshalling实现采用了type-class编程模式,需要为每一种类型Json的转换在可视域内提供Marshaller[A,B]类型的隐式实例。...Akka-http默认的Json工具库是Spray-Json,着重case class,而且要提供JsonFormat?(case-class),其中?...不过因为是Akka-http的配套库,在将来Akka-http的持续发展具有一定的优势,所以我们还是用它来进行下面的示范。 下面就让我们开始写些代码吧。...._ import akka._ import akka.http.scaladsl.common._ import spray.json.DefaultJsonProtocol import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport

1.5K70

Akka(42): Http:身份验证 - authentication, authorization and use of raw headers

当我们把Akka-http作为数据库数据交换工具时,数据是以Source[ROW,_]形式存放在Entity里的。很多时候除数据之外我们可能需要进行一些附加的信息传递如对数据的具体处理方式等。...我们可以通过Akka-http的raw-header来实现附加自定义消息的传递,这项功能可以通过Akka-http提供的raw-header筛选功能来实现。...import akka._ import akka.http.scaladsl.common._ import spray.json.DefaultJsonProtocol import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport...import akka.http.scaladsl.common.EntityStreamingSupport import akka.http.scaladsl.model._ import spray.json...akka.http.scaladsl.common._ import spray.json.DefaultJsonProtocol import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport

84850

akka-grpc - 基于akka-httpakka-streams的scala gRPC开发工具

这是在系统集成编程方面相对akka-http占优的一个亮点。protobuf格式数据可以很方便的转换成 json格式数据,支持对外部系统的的开放协议数据交换。...在http/1应用对二进制文件的传输交换有诸多限制和不便,特别是效率方面的问题。在protobuf这种序列化模式对任何类型的数据格式都一视同仁,可以很方便的实现图片等文件的上传下载。...也许,在开发一套内部IT系统的过程akka-grpc可以很趁手。...数据类型和服务函数用IDL定义的.proto文件内容如下: syntax = "proto3"; //#options option java_multiple_files = true; //option..., "com.typesafe.akka" %% "akka-http" % AkkaHttpVersion, "com.typesafe.akka" %% "akka-http-spray-json

1.9K20

akka-typed(9) - 业务分片、整合,谈谈lagom, 需要吗?

这是个akka-cluster-sharding模式。数据台api是向所有内部系统以及一些特定的外部第三方系统开放的,用http标准协议支持各系统与数据后台的连接也是合理的。...这个akka-http, akka-grpc可以胜任。然后各系统之间的集成可以通过一个流运算工具kafka实现各聚合根之间的交互连接。 似乎所有需要的工具都齐备了,其中akka占了大部分功能。...play我不太熟悉,想深入了解一下用akka-http替代的可行性,不过看来不太容易。...在我看来:服务接入方面由于涉及身份验证、使用权限、二进制文件类型数据交换等使用akka-http,akka-grpc会更有控制力。...服务功能实现直接就用akka-cluster-sharding,把计算任务分布到各节点上,这个我们前面已经介绍过了。 所以,最后还是决定直接用akka-typed来实现这个数据台。

77920

异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka

Akka 提供了透明的消息传递,使得在分布式环境中发送消息就像在本地一样简单。 容错性:Akka 强调容错性,允许开发人员构建可靠的系统。...插件和扩展:Akka 提供了丰富的插件和扩展机制,可以轻松集成其他库和框架, Akka HTTPAkka Streams 等,以构建全栈应用程序。...完全异步和基于流的HTTP服务器和客户端为构建微服务提供了一个很好的平台。...对共享内存在现代计算机架构上的误解 在多核CPU架构,多线程之间不再有真正的共享内存,而是通过Cache行传递数据,使得共享变量的内存可见性成为问题。...Actor的状态是本地的,不共享,通过消息传递数据,符合现代系统内存工作方式。 Actor可以高效地处理大量消息,充分利用多核CPU的潜力。

78540

ScalaPB(0): 找寻合适的内部系统微服务集成工具

曾经花了点时间研究了一下akka-http:当时我初选的所谓系统集成工具,它是通过json格式数据交换来集成系统的。json是个标准数据格式,所以可以实现异类系统之间的数据交换。...一直在考虑,如果SDP数据平台微服务之间是通过akka-http进行数据交换的形式实现集成的话,这个集成的体系内部交互效率会非常低,这是因为1、json是一种字符型的数据,占据空间较大,传输效率自然低。...实际上使用akka-http需要的门槛很高,即使akka-http已经提供了许多帮助http操作的类型,但光是理解http协议内容及httprequest,httpresponse细节、构建、使用方法就花去了我几个星期的精力...由于产生的源代码不涉及任何http协议相关类型及操作,使用起来更容易上手。 在scala编程世界里我们可以用scalaPB来实现对gRPC和protobuf的使用。...java数据类型和抽象服务框架 3、在java编程可以直接调用编译产生的数据类型及对数据进行操作 4、继承并实现产生的服务类 scalaPB是一个scala版的protobuf编译器。

63820

Java一分钟之-Akka:反应式编程框架

Actor:最小的处理单元,通过消息传递进行通信。 Message:Actors之间传递的信息载体。 Props:用于创建Actor实例的配置对象。 常见问题与易错点 1....错误的消息处理 问题描述:不恰当的消息类型处理可能导致Actor行为异常。 解决方案:在Actor类实现unhandled方法,捕获未处理的消息类型,并给出合理的响应或日志记录。...message) { log.warning("Received unexpected message: {}", message); } 如何避免常见陷阱 明确消息契约:确保Actor间的消息类型内容有明确的约定...细粒度划分Actor:根据职责单一原则,将复杂逻辑分解到多个小Actor,提高系统的可维护性和扩展性。...合理使用并发工具:使用ActorSystem.scheduler()安排定时任务,避免直接使用线程池。 监控与日志:充分利用Akka的日志和监控功能,及时发现并解决问题。

7310
领券