播放 2.5 akka.stream.Materializer 有什么用?

2024-02-22

我最近开始使用Play 2.5,我想知道这样做的目的是什么:

@Inject() (implicit val mat: Materializer)

我有几段代码无法正常工作并解决了该问题,但我仍然看不到物化器在做什么。

Thanks


物化意味着产生结果graph https://doc.akka.io/docs/akka/current/stream/stream-graphs.html?language=scala

物化器使actors https://doc.akka.io/docs/akka/current/actors.html?language=scala执行图表以产生这些结果。

最简单形式的图由提供元素的源和消耗元素的接收器组成。

这是提供一系列整数的源(在本例中,整数是我们的元素):

val source = Source(1 to 10)

这是一个接收器,它将从源获取的所有整数相加:

val sink = Sink.fold[Int, Int](0)(_ + _)

我们连接源和接收器得到一个图:

val graph = source.toMat(sink)(Keep.right)

请注意没有计算在我们的例子中,加法是在创建图形时执行的。 代码是陈述性的 https://stackoverflow.com/questions/129628/what-is-declarative-programming,这些图描述了我们想要如何转换数据,但实际执行计算是其他人的工作:图是蓝图 https://doc.akka.io/docs/akka/current/stream/stream-flows-and-basics.html?language=scala#stream-materialization.

现在,物化器怎么样?当我们运行图表时,物化器会采取行动:

implicit val materializer = ActorMaterializer()
val futureResult = graph.run()

When we run()图表,物化器获取图表并让参与者执行图表中指定的数据转换;在这个例子中,就是整数相加。

将图表想象为建造房屋的蓝图,将物化器想象为工头,看着蓝图,告诉建造者如何根据蓝图实际建造房屋,这可能会有所帮助。这个类比中的构建器对应于 Akka 中的参与者。

您的几段代码现在可以工作的原因是,通过物化器,您提供了一种执行图形的方法。图表大量用于阿卡 HTTP https://doc.akka.io/docs/akka-http/current/?language=scalaPlay 用于 HTTP 请求和响应。

The WSClient https://www.playframework.com/documentation/2.5.x/ScalaWS#Making-a-Request您在评论中提到使用图表来执行其请求,因此需要一个物化器。


这是创建和运行图表的完整示例:

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Keep, Sink, Source}

object Graphs extends App {
  // The start of our simple graph. It provides elements, integers in our case
  val source = Source(1 to 10)

  // The end of our graph. It processes the source's elements
  val sink = Sink.fold[Int, Int](0)(_ + _)

 /*
  * Connect source and sink.
  * Keep only the output values (i.e., the graph's right side).
  * Note that this is declarative: no result is computed until we run the graph.
  */
  val graph = source.toMat(sink)(Keep.right)

  // The system coordinates actors and provides threads for them
  implicit val actorSystem = ActorSystem()
  // The materializer makes actors execute graphs
  implicit val materializer = ActorMaterializer()

  // Running the graph means that the materializer assigns actors to execute
  // the graph from start (source) to end (sink)
  val futureResult = graph.run()

  // Use the actor system's execution context, which provides threads,
  // to print the result of running the graph
  implicit val executionContext = actorSystem.dispatcher
  futureResult.foreach(res => println(s"Result of running the graph: $res"))

  actorSystem.terminate().foreach(_ => println("System is shut down"))
}

把这个放在你的build.sbt使 Akka 的流库在您的代码中可用:

libraryDependencies += "com.typesafe.akka" %% "akka-stream" % "2.5.19"

这里还有更多 https://doc.akka.io/docs/akka/current/stream/stream-graphs.html?language=scala关于源和汇。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

播放 2.5 akka.stream.Materializer 有什么用? 的相关文章

  • Scala:获取 Map.head 元素的键(和值)

    让我们想象一下以下不可变的 Map val foo Map 10 ten 100 one hundred 我想获得第一个元素的密钥 foo head获取第一个元素 但接下来呢 我还想要这个元素的值 即 十 设置键 值对 val key va
  • 如何在Scala中实现尾递归快速排序

    我写了一个递归版本 def quickSort T xs List T p T T gt Boolean List T xs match case Nil gt Nil case gt val x xs head val left righ
  • 选项包装值是一个好的模式吗?

    我最近写了以下 Scala 代码 val f File pretend this file came from somewhere val foo toFoo io Source fromFile f mkString 我真的不喜欢这种方式
  • Spark:替换嵌套列中的空值

    我想更换所有n a以下数据框中的值unknown 它可以是scalar or complex nested column 如果它是一个StructField column我可以循环遍历列并替换n a using WithColumn 但我希
  • 什么样的函数被认为是“可组合的”?

    维基百科文章函数组合 计算机科学 https en wikipedia org wiki Function composition computer science says 就像数学中通常的函数组合一样 每个函数的结果作为下一个函数的参数
  • 如何设计具有相互依赖的测试的 Specs2 数据库测试?

    有没有一些首选的方法来设计Specs2 http etorreborre github com specs2 测试 有很多测试取决于之前测试的结果 下面 您将找到我当前的测试套件 我不喜欢var位于测试片段之间 不过 它们是 需要的 因为某
  • Scala 中抛出异常,什么是“官方规则”

    我正在 Coursera 上学习 Scala 课程 我也开始阅读 Odersky 的 Scala 书 我经常听到的是 在函数式语言中抛出异常不是一个好主意 因为它破坏了控制流 并且我们通常返回一个失败或成功的 Either Scala 2
  • Spark日期格式问题

    我在火花日期格式中观察到奇怪的行为 实际上我需要转换日期yy to yyyy 日期转换后 日期应为 20yy 我尝试过如下 2040年后失败 import org apache spark sql functions val df Seq
  • 如何将模型结果保存到文本文件?

    我正在尝试将从模型生成的频繁项集保存到文本文件中 该代码是 Spark ML 库中 FPGrowth 示例的示例 Using saveAsTextFile直接在模型上写入 RDD 位置而不是实际值 import org apache spa
  • 如何从命令行向 REPL 添加导入?

    如何使 REPL 导入命令行中给出的包 Sample scala someMagicHere import sys error scala gt imports 1 import scala Predef 162 terms 78 are
  • 具有两个通用参数的上下文边界

    在 Scala 中 我可以使用上下文边界 def sort T Ordered t Seq T 与以下意思相同 def sort T t Seq T implicit def Ordered T 如果我有一个带有两个泛型参数的类怎么办 IE
  • HashPartitioner 是如何工作的?

    我阅读了文档HashPartitioner http spark apache org docs 1 3 1 api java index html org apache spark HashPartitioner html 不幸的是 除了
  • 模拟 BlazeClientBuilder[IO] 以返回模拟客户端[IO]

    我正在使用BlazeClientBuilder IO resource方法得到Client IO 现在 我想模拟客户端进行单元测试 但不知道该怎么做 有没有一个好的方法来嘲笑这个 我会怎么做 class ExternalCall val r
  • 从 HList 获取元素

    我尝试了 HList 并按预期进行了以下工作 val hl 1 foo HNil val i Int hl 0 val s String hl 1 但是 我无法让以下代码正常工作 让我们暂时假设对列表进行随机访问是一个聪明的主意 class
  • 高效序列化案例类

    对于我正在工作的图书馆 我需要提供一个高效 便捷 typesafe序列化 scala 类的方法 理想的情况是用户可以创建一个案例类 并且只要所有成员都是可序列化的 它似乎也应该如此 我准确地知道序列化和反序列化阶段的类型 因此不需要 也不能
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • 使用 net.liftweb.json 或 scala.util.parsing.json 解析大型 (30MB) JSON 文件会出现 OutOfMemoryException。有什么建议吗?

    我有一个包含大量测试数据的 JSON 文件 我想解析这些数据并推送我正在测试的算法 它的大小约为 30MB 包含大约 60 000 个元素的列表 我最初在 scala util parsing json 中尝试了简单的解析器 如下所示 im
  • Spark:如何使用crossJoin

    我有两个数据框 df1有 100000 行并且df2有 10000 行 我想创建一个df3这是两者的交叉连接 val df3 df1 crossJoin df2 这将产生 10 亿行 尝试在本地运行它 但似乎需要很长时间 您认为本地可以实现
  • 在 Scala 中将元素追加到列表末尾

    我无法添加 type 元素T到一个列表中List T 我尝试过myList myElement但它似乎创建了一个奇怪的对象并访问myList last始终返回放入列表中的第一个元素 我怎么解决这个问题 List 1 2 3 4 Result
  • scala中的反引号有什么用[重复]

    这个问题在这里已经有答案了 我在一本书上找到了以下代码 val list List 5 4 3 2 1 val result 0 list running total next element running total next elem

随机推荐

  • Meteor 帐户自动登录模式?

    我正在考虑使用手机号码注册系统 人们可以使用手机号码注册并收到短信来验证他们是否存在 此时我想让他们自动登录而无需密码 短信基本上就是密码 这是以 Lyft 应用程序注册为模式的 不需要用户名 密码等 但对于我的一生 我不知道如何做到这一点
  • 从核心音频框架开始

    对于我打算很快开始的项目 我需要播放压缩和未压缩的音频文件 为此 我打算使用 Core Audio 框架 然而 我之前没有音频编程经验 我真的不知道从哪里开始 是否有任何初学者级别的资源或示例项目可以演示如何使用 Core Audio 构建
  • Java 不允许泛型类使用内部类数组

    我知道您无法创建泛型类型的数组 而是必须诉诸黑客 鉴于 Java 支持泛型数组 只是不支持它们的创建 我不清楚为什么 hack 比支持创建泛型数组的 Java 更好 而不是写这个 Map Entry
  • 为什么 typeof(int).ToString() 不是常量?

    我正在尝试这样做 const string intType typeof int ToString switch typeof MyT ToString case intType return int break 但编译器说 错误CS013
  • 基于规则的节点重组

    假设我有以下 XML 文件 其中包含我想根据规则重新排列的节点
  • JSF2 无法从 ViewScoped 作为 ManagedProperty 访问 SessionScoped bean

    我有一个奇怪的问题 Afaik 我可以将 SessionScoped bean 注入到 viewscoped 中 因为它比另一个更广泛 这是我的代码 ManagedBean ViewScoped public class ProjectBe
  • 如何在 React-query 中使用惰性查询?

    我正在使用 React query 进行 API 调用 我想知道是否有一种方法可以以惰性方式调用查询 意味着仅当查询参数更改时才调用查询 这就是我目前所拥有的 我正在使用黑客useEffect哪里如果recipeName更改 然后运行ref
  • Django 与远程 Oracle 服务器的性能非常慢

    我正在 Django 中向远程 Oracle 服务器运行原始 SQL 查询 查询很长并且花了一分半钟才完成 但如果我使用 Oracle SQL Server 程序执行相同的查询 则查询运行时间不到一秒 为何性能差异如此之大 如何加快 Dja
  • 如何在按 Enter 键时 dataGridView 光标转到下一行

    我已经编写了以下代码 当用户按 Enter 时转到下一个单元格 但代码不起作用 我无法找到错误 private void dataGridView1 KeyDown object sender KeyEventArgs e if e Key
  • 有没有办法在 Play 商店中设置每个 Android 版本(而不是 API 级别)的应用程序兼容性?

    我有一个可以在 Android 2 3 6 上运行的应用程序 但会导致干扰 https stackoverflow com questions 14804304 when does android show a pairing dialog
  • 如何将 numpy 数组从某一行开始写入 .txt 文件? numpy 版本 1.6

    At 如何将 numpy 数组从某一行开始写入 txt 文件 https stackoverflow com questions 39483774 how to write numpy arrays to txt file starting
  • 从“Class”分配给“id”的指针类型不兼容

    我有一个 Utility 实现的类AVAudioPlayerDelegate协议 这是我的实用程序 h interface Utility NSObject
  • 有没有办法让 git 显示添加的行、更改的行和删除的行?

    git diff stat and git log stat显示输出如 git diff C stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 app controllers applic
  • 解耦视图、表示和 ASP.NET Web 窗体

    我有一个 ASP NET Web 窗体页面 演示者需要用控件填充该页面 这种交互对页面生命周期有些敏感 我想知道它是否有一个我不知道的技巧 我想对整个事情保持实际 但不妥协可测试性 目前我有这个 public interface ISome
  • Sqoop - 数据分割

    Sqoop 能够使用以下方式从多个表导入数据 query子句 但不清楚是否能够导入以下查询 按部门号从员工组中选择部门号 平均工资 另一个问题是 sqoop import connect jdbc mysql myserver 1202 u
  • 幂等 PostgreSQL DDL 脚本

    我正在寻找一种以幂等方式编写 postgreSQL 架构更改脚本的方法 在 MSSQL 中我可以这样做 if not exists select from information schema columns where table nam
  • 对于盲人程序员来说,有哪些好的计算机科学资源?

    我是一个完全失明的人 想了解更多计算机科学的理论方面 我已经学习了介绍性数据结构课程和一般介绍性编程 但想了解更多有关软件设计 高级数据结构和编译器设计等知识 我想将其作为自学课程而不是大学课程的一部分 不幸的是 我通常从盲人和诵读困难者的
  • C 中的按位索引?

    我正在尝试实现我的数据压缩想法 并且由于我想象针对大量测试数据运行它 所以我曾想过用 C 对其进行编码 我主要有 Ruby 等脚本语言的经验 天哪 浏览 O Reilly 的 Cow 书籍 我意识到我不能简单地对简单的 char 或 int
  • Powershell $Error 对象未立即填充到 PSM1 模块内

    我在使用 Powershell 时遇到了一个特殊问题 我在 catch 块中捕获异常 但未填充全局 Error 对象 一个简单的例子 它的行为符合预期 如下所示 function Bar Foo function Foo try Error
  • 播放 2.5 akka.stream.Materializer 有什么用?

    我最近开始使用Play 2 5 我想知道这样做的目的是什么 Inject implicit val mat Materializer 我有几段代码无法正常工作并解决了该问题 但我仍然看不到物化器在做什么 Thanks 物化意味着产生结果gr