簡體   English   中英

將Akka HTTP直接連接到Akka Stream Flow

[英]Connecting Akka HTTP directly to an Akka Stream Flow

我查看了https://doc.akka.io/docs/akka-http/current/introduction.html中的示例,了解Akka HTTP路由,奇怪的是,建立在Akka Streams之上的內容沒有一個示例連接到流。

有人可以展示一個創建Java DSL流程的簡單示例(請不要使用Scala),然后將Route直接連接到該流程嗎?

或者我錯過了這一點,這是不可能的,但需要Route中的一些CompletionStage代碼來等待調用Flow的粘合代碼的結果?

編輯:澄清流程可以做一些事情,如將字符串附加到已發布的請求正文。

使用akka流完成路線絕對是可能的。 它涉及:

  • Web套接字路由,請參閱文檔中的示例 ,或
  • 一個分塊的http響應(因為如果它是從流中提供的,你通常不知道響應的大小)。 您可以從akka流源ByteStrings 創建Chunked Entity
  • 如果事先知道響應大小,您還可以使用其他響應類型,請參閱HttpEntity的文檔了解其具體信息

編輯:澄清流程可以做一些事情,如將字符串附加到已發布的請求正文。

Michał的答案包含很好的鏈接,所以請給他們一個閱讀。 Akka HTTP默認情況下始終使用其數據進行流式傳輸 - 例如實體。 因此,例如,要進行流式“echo”,同時添加后綴,您可以執行以下操作:

path("test", () ->
  // extract the request entity, it contains the streamed entity as `getDataBytes`
  extractRequestEntity(requestEntity -> {

  // prepare what to add as suffix to the incoming entity stream:
  Source<ByteString, NotUsed> suffixSource = 
    Source.single(ByteString.fromString("\n\nADDS THIS AFTER INCOMING ENTITY"))

  // concat the suffix stream to the incoming entity stream
  Source<ByteString, Object> replySource = requestEntity.getDataBytes()
    .concat(suffixSource);

    // prepare and return the entity:
    HttpEntity.Chunked replyEntity = HttpEntities.create(ContentTypes.TEXT_PLAIN_UTF8, replySource);
    return complete(StatusCodes.OK, replyEntity);
  })
);

話雖如此,有許多方法可以利用流媒體功能,包括框架JSON流媒體等。 您還應該提供有關流式讀取的含義文檔頁面

暫無
暫無

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

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