簡體   English   中英

Akka Java文件IO限制

[英]Akka Java File IO Throttling

我想逐行將文件內容流式傳輸到Actor。 我有這樣的事情:

final ActorSystem system = ActorSystem.create("stream_system");
final Materializer materializer = ActorMaterializer.create(system);
final ActorRef actor = system.actorOf(Props.create(streamActor.class), "sink");

final Path file = Paths.get("path/file.txt");

Sink<ByteString, CompletionStage<Done>> printlnSink =
        Sink.<ByteString> foreach(chunk -> actor.tell(chunk.utf8String(), null));
        //Sink.<ByteString> actorRef(actor, null);

CompletionStage<IOResult> ioResult =
        FileIO.fromPath(file)
                .throttle(1, Duration.create(1, TimeUnit.SECONDS), 1, ThrottleMode.shaping())
                .to(printlnSink)
                .run(materializer);

未注釋版本可以使用,但可以一次性流式傳輸整個文件內容。 帶注釋的版本以“未知”消息結尾。

我想幾秒鍾延遲地逐行發送給Actor。 任何幫助如何實現這一目標? 接收actor只需獲取String消息並將其打印在輸出上。

Framing類可以幫助您:

CompletionStage<IOResult> ioResult =
    FileIO.fromPath(file)
          .via(Framing.delimiter(ByteString.fromString(System.lineSeparator()), 1000, FramingTruncation.ALLOW))
          .throttle(1, Duration.create(1, TimeUnit.SECONDS), 1, ThrottleMode.shaping())
          .to(printlnSink)
          .run(materializer);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM