使用Akka流有条件地跳过流

法尔玛里

我正在使用akka流,但由于流量无法处理某些值,因此需要有条件地跳过图的一部分。具体来说,我有一个接受字符串并发出http请求的流,但是当字符串为空时,服务器无法处理这种情况。但是我只需要返回一个空字符串即可。有没有一种方法可以执行此操作而不必经历http请求,而知道它会失败?我基本上有这个:

val source = Source("1", "2", "", "3", "4")
val httpRequest: Flow[String, HttpRequest, _]
val httpResponse: Flow[HttpResponse, String, _]
val flow = source.via(httpRequest).via(httpResponse)

我唯一能想到的就是在httpResponse流中捕获400错误并返回默认值。但是我希望能够避免因我知道事先将失败的请求而打入服务器的开销。

拉蒙·J·罗梅罗和维吉尔

维克多·巴生的解决方案是简洁,优雅我只是想演示使用图的替代方法。

您可以将字符串的源分成两个流,并为有效字符串过滤一个流,对于无效字符串过滤另一个流。然后合并结果(“越过流”)。

根据文档

val g = RunnableGraph.fromGraph(FlowGraph.create() { implicit builder: FlowGraph.Builder[Unit] =>
  import FlowGraph.Implicits._

  val source = Source(List("1", "2", "", "3", "4"))
  val sink : Sink[String,_] = ???

  val bcast = builder.add(Broadcast[String](2))
  val merge = builder.add(Merge[String](2))

  val validReq =   Flow[String].filter(_.size > 0)
  val invalidReq = Flow[String].filter(_.size == 0)

  val httpRequest: Flow[String, HttpRequest, _] = ???
  val makeHttpCall: Flow[HttpRequest, HttpResponse, _] = ???
  val httpResponse: Flow[HttpResponse, String, _] = ???
  val someHttpTransformation = httpRequest via makeHttpCall via httpResponse

  source ~> bcast ~> validReq ~> someHttpTransformation ~> merge ~> sink
            bcast ~>      invalidReq                    ~> merge
  ClosedShape
})

注意:此解决方案拆分了流,因此接收器可能以与基于输入所期望的顺序不同的顺序处理字符串值结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用流有条件地终止循环收集

来自分类Dev

使用FFMpeg有条件地编码或复制音频流

来自分类Dev

有条件地在Node.js中管道流

来自分类Dev

有条件地合并两个Rx流

来自分类Dev

Java流有条件地添加多个值

来自分类Dev

有条件地向Java 8流添加操作

来自分类Dev

Java流有条件地添加多个值

来自分类Dev

有条件地跳过TestNG测试

来自分类Dev

有条件地跳过等待任务的响应

来自分类Dev

有条件地跳过TestNG测试

来自分类Dev

使用杰克逊序列化时有条件地跳过对象

来自分类Dev

有条件地使用请求参数进行跳过和限制

来自分类Dev

具有条件流的基于BPMN事件的网关

来自分类Dev

在使用 Excel 的 VBA 循环期间有条件地跳过 CSV 文件中的一行

来自分类Dev

使用AngularJS有条件地更改CSS

来自分类Dev

AngularJS-有条件地使用属性指令

来自分类Dev

使用Javascript有条件地过滤对象数组

来自分类Dev

使用Aurelia有条件地显示Element

来自分类Dev

如何有条件地使用Test :: Simple?

来自分类Dev

使用TSQL有条件地创建存储过程

来自分类Dev

有条件地使用WP8.1功能

来自分类Dev

在PHP中有条件地使用特征

来自分类Dev

如何使autoconf有条件地使用系统扩展?

来自分类Dev

可以有条件地使用“ with”语句吗?

来自分类Dev

使用jQuery有条件地设置属性

来自分类Dev

如何有条件地正确使用jQuery replaceWith?

来自分类Dev

如何有条件地使用芹菜做任务?

来自分类Dev

使用Futurebuilder有条件地渲染小部件

来自分类Dev

如何有条件地使用SQL通配符?