Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 对于Akka Streams,我如何知道源何时完成?_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Akka_Akka Stream_Reactive Streams_Alpakka - Fatal编程技术网 elasticsearch 对于Akka Streams,我如何知道源何时完成?,elasticsearch,akka,akka-stream,reactive-streams,alpakka,elasticsearch,Akka,Akka Stream,Reactive Streams,Alpakka" /> elasticsearch 对于Akka Streams,我如何知道源何时完成?,elasticsearch,akka,akka-stream,reactive-streams,alpakka,elasticsearch,Akka,Akka Stream,Reactive Streams,Alpakka" />

elasticsearch 对于Akka Streams,我如何知道源何时完成?

elasticsearch 对于Akka Streams,我如何知道源何时完成?,elasticsearch,akka,akka-stream,reactive-streams,alpakka,elasticsearch,Akka,Akka Stream,Reactive Streams,Alpakka,我有一个Alpakka ElasticsearchSink,我在请求之间保留着它。当我收到一个请求时,我从HTTP请求中创建一个Source,并将其转换为ElasticsearchWriteMessages的Source,然后使用mySource.runWith(thelasticseaschsink)运行该请求 当源代码完成时,如何通知我?似乎什么有用的东西都没有实现 源代码的完成是否会传递给接收器,这意味着我每次都必须创建一个新的 如果上面的回答是肯定的,是否会使用Flow.fromSour

我有一个Alpakka Elasticsearch
Sink
,我在请求之间保留着它。当我收到一个请求时,我从HTTP请求中创建一个
Source
,并将其转换为Elasticsearch
WriteMessage
s的
Source
,然后使用
mySource.runWith(thelasticseaschsink)
运行该请求

  • 当源代码完成时,如何通知我?似乎什么有用的东西都没有实现
  • 源代码的完成是否会传递给接收器,这意味着我每次都必须创建一个新的
  • 如果上面的回答是肯定的,是否会使用
    Flow.fromSourceAndSink
    help以某种方式将它们解耦

  • 我的目标是知道HTTP下载何时完成(包括通过它所经过的
    ),并能够重用接收器。

    您可以随意传递流的单个部分,甚至可以传递整个executabe图(这些是不可变的)。run()调用具体化流,但不会更改图形或其部分

    (一) 既然您想知道HttpDownload何时通过流,为什么不使用Future[Done]的完整图形呢?假设您对elasticsearch的调用是异步的,这应该是相等的,因为您的接收器只是触发调用而不等待。 您还可以使用Source.queue()将消息添加到队列中,然后队列将重用定义的图,以便在需要处理时添加新消息。这一个还具体化了SourceQueueWithComplete,允许您停止流。 除此之外,在需要的地方重用水槽,而无需等待另一个流使用它

    2) 如上所述:不需要多次实例化接收器

    致以最良好的祝愿,
    Andi

    您可以随意传递流的单个部分,甚至可以传递整个executabe图(这些是不可变的)。run()调用具体化流,但不会更改图形或其部分

    (一) 既然您想知道HttpDownload何时通过流,为什么不使用Future[Done]的完整图形呢?假设您对elasticsearch的调用是异步的,这应该是相等的,因为您的接收器只是触发调用而不等待。 您还可以使用Source.queue()将消息添加到队列中,然后队列将重用定义的图,以便在需要处理时添加新消息。这一个还具体化了SourceQueueWithComplete,允许您停止流。 除此之外,在需要的地方重用水槽,而无需等待另一个流使用它

    2) 如上所述:不需要多次实例化接收器

    致以最良好的祝愿,
    Andi

    事实证明,Alpakka的Elasticsearch库也支持流形状,因此我可以让我的源代码通过它,并通过任何实现未来的接收器运行它
    Sink.foreach
    在这里可以很好地用于测试目的,例如在中

    定义
    es.flow
    ,然后

    val graph = response.entity.withSizeLimit(MaxFeedSize).dataBytes
        .via(scanner)
        .via(CsvToMap.toMap(Utf8))
        .map(attrs => Product(attrs("id").decodeString(Utf8), attrs.mapValues(_.decodeString(Utf8))))
        .via(es.flow)
    
    val futureDone = graph.runWith(Sink.foreach(println))
    
    futureDone onComplete {
        case Success(_) => println("Done")
        case Failure(e) => println(e)
    }
    

    事实证明,Alpakka的Elasticsearch库也支持流形状,所以我可以让我的源代码通过它,并通过任何实现未来的接收器运行它
    Sink.foreach
    在这里可以很好地用于测试目的,例如在中

    定义
    es.flow
    ,然后

    val graph = response.entity.withSizeLimit(MaxFeedSize).dataBytes
        .via(scanner)
        .via(CsvToMap.toMap(Utf8))
        .map(attrs => Product(attrs("id").decodeString(Utf8), attrs.mapValues(_.decodeString(Utf8))))
        .via(es.flow)
    
    val futureDone = graph.runWith(Sink.foreach(println))
    
    futureDone onComplete {
        case Success(_) => println("Done")
        case Failure(e) => println(e)
    }
    

    但是,我如何才能真正获得一个
    未来[完成]
    ?Akka http的
    ResponseEntity
    数据字节
    源具体化
    任何
    def-dataBytes:source[ByteString,Any]
    ),我不知道这是为什么或者应该是什么。我指的是接收器的具体化值。从你所描述的,你真的需要它的来源?对于sink,您可以使用sink.foreach,它实现了一个未来[完成]。请尝试在源上指定为什么需要它,以防您需要它。如果您确实需要它,您可以添加viaMat并为您的源编写自定义物化,它提供状态,然后通过(Keep.right)或(Keep.left)将其传递到流中。今晚我没有时间写一个例子,但是如果你需要的话,请发布一些例子(简化的)代码。我在这里放了一个小程序:。正如您所看到的,当我运行它时,我得到了一个
    未使用的
    ,因此我在那里没有什么可处理的。但是,我如何真正得到一个
    未来[完成]
    ?Akka http的
    ResponseEntity
    数据字节
    源具体化
    任何
    def-dataBytes:source[ByteString,Any]
    ),我不知道这是为什么或者应该是什么。我指的是接收器的具体化值。从你所描述的,你真的需要它的来源?对于sink,您可以使用sink.foreach,它实现了一个未来[完成]。请尝试在源上指定为什么需要它,以防您需要它。如果您确实需要它,您可以添加viaMat并为您的源编写自定义物化,它提供状态,然后通过(Keep.right)或(Keep.left)将其传递到流中。今晚我没有时间写一个例子,但是如果你需要的话,请发布一些例子(简化的)代码。我在这里放了一个小程序:。正如您所看到的,当我运行它时,我得到了一个
    未使用的
    ,因此我没有什么可处理的。